<?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>SamuraiDio &#187; programação</title>
	<atom:link href="http://blog.diovani.com/tag/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.diovani.com</link>
	<description>GNU/Linux &#124; PHP &#124; JavaScript</description>
	<lastBuildDate>Sat, 18 Dec 2010 21:19:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Por que utilizar utf-8?</title>
		<link>http://blog.diovani.com/2010/12/14/por-que-utilizar-utf-8/</link>
		<comments>http://blog.diovani.com/2010/12/14/por-que-utilizar-utf-8/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 23:21:52 +0000</pubDate>
		<dc:creator>diovani</dc:creator>
				<category><![CDATA[Sem Categoria]]></category>
		<category><![CDATA[base de dados]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://blog.diovani.com/?p=409</guid>
		<description><![CDATA[Um problema comum que vejo se repetindo constantemente em listas de discussão é devido a codificação de caracteres em páginas web.
Geralmente os desenvolvedores, inexperientes, solicitam ajuda por terem problemas que fazer caracteres acentuados aparecerem corrompidos, como &#8220;Ã§Ã£&#8221; e acabam adotando soluções pouco robustas, como editar o httpd.conf (no caso de um servidor web Apache) ou [...]]]></description>
			<content:encoded><![CDATA[<p>Um problema comum que vejo se repetindo constantemente em listas de discussão é devido a codificação de caracteres em páginas web.</p>
<p>Geralmente os desenvolvedores, inexperientes, solicitam ajuda por terem problemas que fazer caracteres acentuados aparecerem corrompidos, como <em>&#8220;Ã§Ã£&#8221;</em> e acabam adotando soluções pouco robustas, como editar o <em>httpd.conf</em> (no caso de um servidor web Apache) ou usar funções <em>utf8_encode/utf8_decode</em> (no caso de programação <em>PHP</em>).</p>
<p>Acontece que tais problemas ocorrem por causa de divergências na codificação de caracteres e é mais comum em ambientes Windows, que utilizam a codificação defasada <em>ISO-8859-1</em> (ou <em>latin-1</em>, como também é chamada).</p>
<p>O modo de evitar este tipo de problema, é desenvolver toda a sua aplicação utilizando uma única codificação de caracteres, desde a base de dados até o <em>HTML</em> exibido para o usuário, e também em seu editor de texto ou <em>IDE</em>. Para garantir isto, por exemplo, em uma aplicação<em> web</em>, desenvolvida com <em>PHP</em> + <em>MySQL,</em> rodando em um servidor <em>Apache2</em> e utilizando <strong><em>utf-8</em></strong>, atente para os seguintes detalhes:</p>
<ol>
<li>No arquivo de configuração do <em><strong>Apache</strong></em> (geralmente <em>httpd.conf</em>, mas podendo variar de um sistema para outro, no <em>Debian GNU/Linux</em>, o padrão é <em>/etc/apache2/apache2.conf</em>) comente a linha com a diretiva ﻿﻿﻿﻿﻿﻿﻿<em><strong>AddDefaultCharset</strong><span style="font-style: normal;">. Como vamos definir a codificação a nível de aplicação, esta diretiva não irá interferir, mas mesmo assim o ideal é deixá-la comentada para evitar surpresas ao colocar a aplicação em produção.</span></em></li>
<li><em><span style="font-style: normal;">O </span><strong>PHP</strong></em> também tem uma diretiva para definir a codificação padrão, geralmente desabilitada por padrão, no arquivo <em>php.ini</em> (no <em>Debian</em>, em <em>/etc/php5/apache2/php.ini</em>) localize e comente a linha com a diretiva <strong><em>default_charset</em></strong>. Assim como no <em>Apache</em>, tal diretiva não deve interferir, mas ainda assim é ideal deixá-la comentada.</li>
<li>Garanta que seu template <strong><em>HTML</em><span style="font-weight: normal;"> contenha a codificação correta definida no cabeçalho, utilizando uma tag <em>meta </em>(<em><strong>&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=UTF-8&#8243; /&gt;<span style="font-style: normal;">).<span style="font-weight: normal;"> Para documentos </span><em>XHTML</em><span style="font-weight: normal;">, também é ideal adicionar a codificação no cabeçalho </span><em><span style="font-weight: normal;">XML</span></em><span style="font-weight: normal;"> (﻿﻿<strong><em>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243; ?&gt;</em></strong>), obviamente esta regra também se aplica para documentos <em><strong>XML</strong></em>.</span></span></strong></em></span></strong></li>
<li><strong><span style="font-weight: normal;"><em><strong><span style="font-style: normal;"><span style="font-weight: normal;">Seu script principal da aplicação, ou seja, aquele que recebe as requisições, geralmente </span><em> index.php</em><span style="font-weight: normal;">, deve enviar um cabeçalho <em>http</em> com a codificação para o navegador antes de qualquer conteúdo. <em>Ex: <strong>header(&#8220;Content-type: text/html; charset=UTF-8&#8243;);</strong><span style="font-style: normal;">.</span></em></span></span></strong></em></span></strong></li>
<li><strong><span style="font-weight: normal;"><em><strong><span style="font-style: normal;"><span style="font-weight: normal;"><em><span style="font-style: normal;">Suas tabelas do </span><strong>MySQL</strong><span style="font-style: normal;"> devem ser criadas com a codificação definida explicitamente. </span>Ex: <strong>CREATE TABLE foo (&#8230;) CHARACTER SET utf8</strong><span style="font-style: normal;">. No </span>MySQL</em> também é possível definir a codificação de caracteres a nível de coluna ou de base de dados, mas a primeira dificilmente será necessária, e eu acho mais usual definir a codificação a nível de tabelas.</span></span></strong></em></span></strong></li>
<li><strong><span style="font-weight: normal;"><em><strong><span style="font-style: normal;"><span style="font-weight: normal;">Seu editor de texto ou <em>IDE</em> deve estar configurado para salvar arquivos em </span><span style="font-weight: normal;"><em>utf-8</em><span style="font-weight: normal;">. No <em>Eclipse</em>, por exemplo, basta configurar sua <em>Workspace</em> (<em>Window -&gt; Preferences -&gt; General -&gt; Workspace</em>), ou seu projeto (Clique direito -&gt; <em>Properties -&gt; Resource</em>) para utilizar a codificação desejada.</span></span></span></strong></em></span></strong></li>
</ol>
<p>Para ser sincero, em geral apenas os ítens <strong>4</strong> e <strong>6</strong> são suficientes para garantir que sua aplicação exiba textos na codificação correta, mas ainda assim vale a pena configurar cada parte dela.</p>
<p>Alguns desenvolvedores <em>web</em> mais antigos, ou pouco experientes podem acabar sugerindo que se utilize <em>htmlentities</em> para caracteres acentuados, como <em>&#8220;&amp;acute&#8221;</em> para escrever um <em>&#8220;á&#8221;</em>. Contudo esta prática é pouco viável para páginas dinâmicas, devido ao tamanho das strings. Por exemplo, nosso simples <em>&#8220;á&#8221;</em>, utilizando <em>htmlentities</em>, não poderia ocupar um campo <em>char(1)</em>, em sua base de dados, precisando de um <em>char(6)</em>, além de ser bem mais conteúdo para o navegador carregar ao visitar a página.</p>
<p>Agora a pergunta: <em>Por que utilizar utf-8</em> ao invés de <em>iso-8859-1</em>?</p>
<p>Bem, existem alguns bons motivos técnicos&#8230; Para começar, <em>utf-8</em> é compatível com caracteres <em>ASCII</em>, então para este não é necessária nenhuma conversão. Também, os caracteres unicode (<em>utf8</em>, <em>utf16</em> e <em>utf32</em>) foram desenvolvidos inicialmente para substituir <em>ASCII</em> e <em>ISO</em>, então é natural que sejam utilizados no lugar destes. Para finalizar, algumas bibliotecas do <em>PHP</em>, e também de outras linguagens, só funcionam com codificação <em>utf-8</em>, tais como <em>json</em>, <em>simpleXML</em> e <em>Soap</em>, assim, utilizando a aplicação toda em <em>utf-8</em> você evita converter constantemente caracteres de/para a codificação desejada.</p>
<p><em>Fontes: <a href="http://www.cl.cam.ac.uk/~mgk25/unicode.html">http://www.cl.cam.ac.uk/~mgk25/unicode.html</a>, <a href="http://wilker-dev.com/porque-usar-utf-8-codificandodecodificando">http://wilker-dev.com/porque-usar-utf-8-codificandodecodificando</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.diovani.com/2010/12/14/por-que-utilizar-utf-8/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Quanto mais simples melhor</title>
		<link>http://blog.diovani.com/2009/01/20/quanto-mais-simples-melhor/</link>
		<comments>http://blog.diovani.com/2009/01/20/quanto-mais-simples-melhor/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 00:08:24 +0000</pubDate>
		<dc:creator>diovani</dc:creator>
				<category><![CDATA[Sem Categoria]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://blog.diovani.com/2009/01/20/quanto-mais-simples-melhor/</guid>
		<description><![CDATA[ Fazendo manutenção em um script hoje no trabalho (código legado), me deparei com um código mais ou menos assim:

$condicao = !&#40;$var == 0&#41;;

Devo ter levado cerca de uns 5 minutos para entender o que a maldita expressão retornava. Pelo menos ela rendeu algumas risadas minhas e de meus colegas.
Acontece que, em programação, quanto mais [...]]]></description>
			<content:encoded><![CDATA[<p> Fazendo manutenção em um script hoje no trabalho (código legado), me deparei com um código mais ou menos assim:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$condicao</span> <span style="color: #339933;">=</span> <span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$var</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Devo ter levado cerca de uns 5 minutos para entender o que a maldita expressão retornava. Pelo menos ela rendeu algumas risadas minhas e de meus colegas.</p>
<p>Acontece que, em programação, quanto mais simples e fácil de entender se deixar uma expressão melhor. Mesmo que você seja o único a ter acesso ao fontes posteriormente.</p>
<p>Não quero criticar o autor do código que eu estava mantendo (até porque não sei quem é), mas apenas estou usando o (mau) código acima para exemplificar o tema do tópico.</p>
<p>Falando de boas práticas de programação, não se nega uma comparação deste jeito. O correto seria usar o operador NOT EQUAL (diferente):</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$condicao</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$var</span> <span style="color: #339933;">!=</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>E se considerarmos as facilidades de conversão de tipos do PHP, podemos simplificar ainda mais, bastanto usar um <a href="http://www.php.net/manual/pt_BR/language.types.type-juggling.php#language.types.typecasting">cast</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$condicao</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>bool<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$var</span><span style="color: #339933;">;</span></pre></div></div>

<p>Explicando&#8230;<br />
A expressão acima (primeiro exemplo) compara se a variável é igual a 0 (zero) e depois nega o resultado, assim se a variável for igual a zero, a comparação retornará true (verdadeiro), que se tornará false (falso) devido a negação (!), o que dá o mesmo resultado que comparar se a variável é diferente de 0 (zero)(segundo exemplo). Como em PHP 0 (zero) é validado com false (falso) e qualquer outro valor como true (verdadeiro), o resultado é o mesmo que simplesmente converter a variável para booleano (terceiro exemplo).</p>
<p>Resumindo, sempre mantenha as linhas de código o mais claras e simples o possível.<br />
Seguem algumas dicas:</p>
<ul>
<li>Evite expressões difíceis de entender, como a do exemplo deste post. Verifique há um modo mais simples de obter o mesmo resultado com código mais claro e/ou menor, se não encontrar, adicione comentário para tornar a expressão mais clara;</li>
<li>use nomes de variáveis que exemplifiquem sua finalidade. Prefira usar <em>$cor</em>, ao invés de <em>$c</em> ou <em>$x</em>;</li>
<li>sempre indente corretamente seu código, deixando os bloco <em>{}</em> bem visíveis. Use linhas em branco entre blocos de comandos diferentes. Prefira usar <em>espaços</em> ao invés de <em>tabs</em> para indentação, assim o código fica com o mesmo visual em qualquer editor;</li>
<li>evite blocos vazios, como um <em>if</em> ou <em>loop</em> sem corpo, é comum encontrarmos blocos como:

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$valor</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$var</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'constante'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li>utilize <em>phpdoc</em>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * Descrição da classe, método ou função
 *
 *@param tipo [variável [descrição]]
 *@return tipo [descrição]
 */</span></pre></div></div>

<p>para definir classes, interfaces, métodos, propriedades e funções. Este é o método de documentação padrão do PHP e auxilia no uso de IDEs especializadas (Eclipse PDT, Zend Studio, etc.);</li>
<li>comente <strong>TODA</strong> linha de código sempre que possível.</li>
</ul>
<p>Com estas boas práticas, seus códigos deverão ter uma vida útil muito mais longa (sim, código fonte tem validade, e a clareza e documentação destes serve de embalagem).</p>
<p>Só pra concluir, vou colocar uma tabelinha de comparações básicas em PHP aqui, do tipo que a gente sempre fica em dúvida quando usa um <em>if($var) </em>:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//array vazio, string vazia, 0 com ou sem aspas e null</span>
<span style="color: #666666; font-style: italic;">//são todos avaliados como FALSE (falso)</span>
<span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">&quot;&quot;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">''</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'0'</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">null</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//se usados operadores de comparação explícita,</span>
<span style="color: #666666; font-style: italic;">//que também comparam os tipos (=== e !==)</span>
<span style="color: #666666; font-style: italic;">//APENAS valores IDÊNTICOS são avaliados</span>
<span style="color: #666666; font-style: italic;">//como TRUE (verdadeiro)</span>
<span style="color: #cc66cc;">0</span> <span style="color: #339933;">===</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">'abc'</span> <span style="color: #339933;">===</span> <span style="color: #0000ff;">'abc'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//todos diferentes se comparados também em seus tipos</span>
<span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!==</span> <span style="color: #0000ff;">&quot;&quot;</span> <span style="color: #339933;">!==</span> <span style="color: #0000ff;">''</span> <span style="color: #339933;">!==</span> <span style="color: #0000ff;">'0'</span> <span style="color: #339933;">!==</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">!==</span> <span style="color: #009900; font-weight: bold;">null</span> <span style="color: #339933;">!==</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.diovani.com/2009/01/20/quanto-mais-simples-melhor/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Compilando Chromium (ou Google Chrome) no Linux</title>
		<link>http://blog.diovani.com/2008/09/11/compilando-chromium-ou-google-chrome-no-linux/</link>
		<comments>http://blog.diovani.com/2008/09/11/compilando-chromium-ou-google-chrome-no-linux/#comments</comments>
		<pubDate>Thu, 11 Sep 2008 19:13:53 +0000</pubDate>
		<dc:creator>diovani</dc:creator>
				<category><![CDATA[Sem Categoria]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://blog.diovani.com/2008/09/11/compilando-chromium-ou-google-chrome-no-linux/</guid>
		<description><![CDATA[Com o lançamento beta do navegador web Google Chrome, obviamente eu também fiquei animado e ansioso para testar o novo &#8220;brinquedinho&#8221;.
Vou mostrar aqui como compilar o Chromium, o projeto no qual é baseado o Google Chrome, no Debian GNU/Linux e rodar os unit tests que vêm com ele. Note que não existe ainda um navegador [...]]]></description>
			<content:encoded><![CDATA[<p>Com o lançamento beta do <a href="http://www.google.com/chrome">navegador web Google Chrome</a>, obviamente eu também fiquei animado e ansioso para testar o novo &#8220;brinquedinho&#8221;.</p>
<p>Vou mostrar aqui como compilar o <a href="http://dev.chromium.org/Home">Chromium, o projeto no qual é baseado o Google Chrome</a>, no Debian GNU/Linux e rodar os <em>unit tests</em> que vêm com ele. Note que não existe ainda um navegador Chromium para Linux, tudo o que temos são alguns comandos de terminal usados para testar alguns móduilos, ou seja, este tutorial será exclusivamente destinado a desenvolvedores (principalmente C/C++) e pessoas curiosas.</p>
<blockquote><p><em>&#8220;<strong>Nota: </strong>Ainda não existe uma versão funcional de navegador baseado no Chromium para Linux. Porém, vários sub-módulos podem ser compilados no Linux, mas tudo o que se obtém é um comando executável que retorna &#8220;all tests pass&#8221;</em>. &#8221;</p>
<p>Se você deseja instalar um navegador baseado no Chromium funcional, procure por um dos vários tutoriais de <a href="http://www.google.com/search?q=instalando+google+chrome+no+wine">instalação do Google Chrome no Wine</a>.</p></blockquote>
<p>Primeiramente, você precisará instalar as seguintes dependencias:</p>
<ul>
<li> Subversion &gt;= 1.4</li>
<li>pkg-config &gt;= 0.20</li>
<li> Python &gt;= 2.4</li>
<li> Perl &gt;= 5.x</li>
<li> gcc/g++ &gt;= 4.2</li>
<li> bison &gt;= 2.3</li>
<li> flex &gt;= 2.5.34</li>
<li> gperf &gt;= 3.0.3</li>
<li> libnss3-dev &gt;= 3.12</li>
</ul>
<p>No Debian e distribuições derivadas dele (como o Ubuntu) basta instalar tudo com o apt-get / aptitude:</p>
<pre># aptitude install subversion \
    pkg-config \
    python \
    perl \
    g++ \
    bison \
    flex \
    gperf \
    libnss3-dev</pre>
<p>Após instalar as dependências, escolha um diretório para colocar os fontes e compilar. Vou considerar que o diretório escolhido seja <strong><em>$HOME/chromium</em></strong>. Primeiramente crie o diretório e mude para ele:</p>
<pre>$ mkdir $HOME/chromium
$ cd $HOME/chromium</pre>
<p>Então obtenha o <em>depot tools</em> usando o comando <em>svn</em>:</p>
<pre>$ svn co http://src.chromium.org/svn/trunk/depot_tools/linux depot_tools</pre>
<p>Como alternativa, você pode <a href="http://build.chromium.org/buildbot/archives/depot_tools_linux.tar.gz">baixar o <em>depot tools</em> em tar.gz</a>.</p>
<p>Depois disso mude seus locales para &#8220;<em>C</em>&#8221; (necessário devido a um bug temporário nos scripts <em>gclient</em>, que interpretam a saída do subversion), e execute <em>./depot_tools/gclient config</em>:</p>
<pre>$ export LANG=C
$ export LANGUAGE=C
$ export LC_ALL=C
$ ./depot_tools/gclient config http://src.chromium.org/svn/trunk/src</pre>
<p>O <em>checkout</em> dos arquivos via <em>svn</em> deve demorar algum tempo, dependendo de sua conexão. Caso esteja muito lento você pode também obtar por obter um <a href="http://build.chromium.org/buildbot/archives/chromium.tgz">snapshopt do SVN Checkout</a>.</p>
<p>Após obter os fontes, para compilar execute:</p>
<pre>$ cd $HOME/chromium/src/chrome
$ ../third_party/scons/scons.py Hammer</pre>
<p>Como o projeto ainda está engatinhando, e os desenvolvedores estão <em>&#8220;brincando&#8221;</em> com o código, é bem comum que alguma coisa falhe nesta parte. Infelizmente será necessário um mínimo de conhecimento em <em>C/C++</em> ou outras linguagens utilizadas para seguir adiante. Eu por exemplo, me deparei com alguns erros nos arquivos <em>src/webkit/glue/webframe_impl.h</em> e <em>src/skia/effects/SkCullPoints.cpp</em>, facilmente corrigidos removendo uma declaração <em>typedef</em> e adicionando alguns parênteses a uma condição, respectivamente. Estou postando meus <em>DIFFs</em> para caso alguém tenha o mesmo problema:</p>
<p><a href="http://blog.diovani.com/wp-content/uploads/2008/09/webframe_implh.diff" title="webframe_implh.diff">webframe_implh.diff</a><br />
<a href="http://blog.diovani.com/wp-content/uploads/2008/09/skcullpointscpp.diff" title="skcullpointscpp.diff">skcullpointscpp.diff</a></p>
<p>Após a compilação, executáveis criados durante o processo estarão disponíveis em <em>$HOME/chromium/src/chrome/Hammer</em>.</p>
<p>Como mencionado anteriormente, <strong><em>Ainda não existe uma versão funcional de navegador baseado no Chromium para Linux</em></strong>. A única coisa que você pode fazer no momento é executar alguns <em>unittests</em>:</p>
<pre>$ cd $HOME/chromium/src/chrome
$ Hammer/base_unittests
$ Hammer/net_unittests</pre>
<p>Para quem tiver interesse em colaborar com os esforços para termos um navegador baseado no Chromium para linux, não deixem de acessar a <a href="http://dev.chromium.org/developers/how-tos/linux-development">página de desenvolvimento para Linux</a>, com alguns detalhes do desenvolvimento, e uma série de bugs aguardando ajuda.</p>
<p>Desta vez não tem screenshot&#8230;<br />
Bem, já que insistem&#8230; aí vai um screenshot de um <em>unittest</em>:</p>
<p><a href="http://blog.diovani.com/wp-content/uploads/2008/09/chrome_baseunittest.jpg" title="chrome_baseunittest.jpg"><img src="http://blog.diovani.com/wp-content/uploads/2008/09/chrome_baseunittest.thumbnail.jpg" alt="chrome_baseunittest.jpg" /></a></p>
<p><em>Fonte: </em><a href="http://dev.chromium.org/developers/how-tos/build-instructions-linux">http://dev.chromium.org/developers/how-tos/build-instructions-linux</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.diovani.com/2008/09/11/compilando-chromium-ou-google-chrome-no-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SpiderMonkey JavaScript Shell &#8211; Programando JavaScript em linha de comando</title>
		<link>http://blog.diovani.com/2008/03/14/spidermonkey-javascript-shell-programando-javascript-em-linha-de-comando/</link>
		<comments>http://blog.diovani.com/2008/03/14/spidermonkey-javascript-shell-programando-javascript-em-linha-de-comando/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 22:10:26 +0000</pubDate>
		<dc:creator>diovani</dc:creator>
				<category><![CDATA[Sem Categoria]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://blog.diovani.com/2008/03/14/spidermonkey-javascript-shell-programando-javascript-em-linha-de-comando/</guid>
		<description><![CDATA[Desenvolvedores Web costumam ter grandes problemas para debugar JavaScript. Enquanto programas como a extensão FireBug do Firefox fazem milagres para debugar, o programador ainda precisa colocar sucessivos alert()s para descobrir os valores que suas variáveis assumem em determinados pontos. Certo?
Errado!
Estava pesquisando agora a pouco algumas funções de js no MDC quando fiquei meio curioso com [...]]]></description>
			<content:encoded><![CDATA[<p>Desenvolvedores Web costumam ter grandes problemas para debugar JavaScript. Enquanto programas como a extensão <a href="https://addons.mozilla.org/pt-PT/firefox/addon/1843">FireBug</a> do Firefox fazem milagres para debugar, o programador ainda precisa colocar sucessivos <a href="http://developer.mozilla.org/en/docs/DOM:window.alert">alert()</a>s para descobrir os valores que suas variáveis assumem em determinados pontos. Certo?</p>
<p><strong><em>Errado!</em></strong></p>
<p>Estava pesquisando agora a pouco algumas funções de js no <a href="http://developer.mozilla.org/">MDC</a> quando fiquei meio curioso com o modo como os exemplos de código eram mostrados e, em especial, de uma função <a href="http://developer.mozilla.org/en/docs/Introduction_to_the_JavaScript_shell#print.28.5Bexpression_....5D.29">print()</a>. Como no fragmento a seguir:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> names <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Harry Trump ;Fred Barney; Helen Rigby ;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span><span style="color: #009900;">&#40;</span>names<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> re <span style="color: #339933;">=</span> <span style="color: #009966; font-style: italic;">/\s*;\s*/</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> nameList <span style="color: #339933;">=</span> names.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span>re<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066;">print</span><span style="color: #009900;">&#40;</span>nameList<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<blockquote><p><em>Ora, bolas! Javascript não pode imprimir nada em stdout, então, como pode existir uma função print()?</em></p></blockquote>
<p>Então que, pesquisando mais um pouquinho, cheguei ao SpiderMonkey Javascript Shell.</p>
<p>O <a href="http://developer.mozilla.org/en/docs/SpiderMonkey">SpiderMonkey</a> é o mecanismo interpretador de Javascript do Gecko, escrito em C, e utilizado em vários produtos Mozilla, como o Firefox, por exemplo e a boa notícia é que ele provê também um Shell para executar js em linha de comando.</p>
<p>Com isso fica extremamente fácil criar e testar scripts para usar posteriormente. Veja o exemplo a seguir:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">diovani<span style="color: #339933;">@</span>debian<span style="color: #339933;">-</span>websul<span style="color: #339933;">:</span>~$ js
js<span style="color: #339933;">&gt;</span> <span style="color: #003366; font-weight: bold;">var</span> frase <span style="color: #339933;">=</span> <span style="color: #3366CC;">'Hello World!'</span><span style="color: #339933;">;</span>
js<span style="color: #339933;">&gt;</span> <span style="color: #003366; font-weight: bold;">var</span> tamanho <span style="color: #339933;">=</span> frase.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>
js<span style="color: #339933;">&gt;</span> <span style="color: #003366; font-weight: bold;">var</span> teste <span style="color: #339933;">=</span> frase <span style="color: #339933;">+</span> <span style="color: #3366CC;">' tem '</span> <span style="color: #339933;">+</span> tamanho <span style="color: #339933;">+</span> <span style="color: #3366CC;">' caracteres.'</span><span style="color: #339933;">;</span>
js<span style="color: #339933;">&gt;</span> <span style="color: #000066;">print</span><span style="color: #009900;">&#40;</span>teste<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Hello World<span style="color: #339933;">!</span> tem <span style="color: #CC0000;">12</span> caracteres.
<span style="color: #660066;">js</span><span style="color: #339933;">&gt;</span></pre></div></div>

<p>Para instalar o SpiderMonkey JS Shell no Debian GNU/Linux basta executar o comando:</p>
<blockquote><p># aptitude update &amp;&amp; aptitude install spidermonkey-bin</p></blockquote>
<p>Após a instalação, basta executar em um terminal o comando <strong>$ js</strong> para entrar no Shell interativo:</p>
<blockquote><p>Para entrar no shell interativo use o comando:<br />
$ js</p>
<p>Para executar os scripts de um arquivo (foo.js) use:<br />
$ js -f foo.js</p>
<p>Para executar os scripts de um arquivo (foo.js) e entrar no shell interativo (muito útil para carregar funções ou bibliotecas) em seguida use:<br />
$ js -f foo.js -f -</p></blockquote>
<p>Mas mesmo para outras distribuições, e até mesmo Windows, deve ser extremamente fácil instalá-lo. Veja o link abaixo para a Documentação do Javascript Shell e exemplos de uso:</p>
<p><em>Link: <a href="http://developer.mozilla.org/en/docs/Introduction_to_the_JavaScript_shell#Using_the_JavaScript_shell">Introdução ao Shell Javascript</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.diovani.com/2008/03/14/spidermonkey-javascript-shell-programando-javascript-em-linha-de-comando/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP Eclipse</title>
		<link>http://blog.diovani.com/2007/10/03/php-eclipse/</link>
		<comments>http://blog.diovani.com/2007/10/03/php-eclipse/#comments</comments>
		<pubDate>Wed, 03 Oct 2007 23:00:01 +0000</pubDate>
		<dc:creator>diovani</dc:creator>
				<category><![CDATA[Sem Categoria]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://blog.diovani.com/2007/10/03/php-eclipse/</guid>
		<description><![CDATA[Após um bom tempo sem postar venho com uma recomendação.
Não faz muito tempo, em meu post sobre Delphi e Visual Studio como IDEs para PHP falei no Eclipse, agora venho fazer um resumo e recomendação sobre esta IDE.
O Eclipse é uma IDE produzida inicialmente para Java, mas que possui plugins para diversas outras linguagens, assim [...]]]></description>
			<content:encoded><![CDATA[<p>Após um bom tempo sem postar venho com uma recomendação.</p>
<p>Não faz muito tempo, em meu post sobre Delphi e Visual Studio como IDEs para PHP falei no Eclipse, agora venho fazer um resumo e recomendação sobre esta IDE.</p>
<p>O Eclipse é uma IDE produzida inicialmente para Java, mas que possui plugins para diversas outras linguagens, assim podendo ser usado para desenvolvimento em C/C++, Ruby, Python, e claro, PHP. Acontece que o Eclipse é, ao meu ver, a segunda melhor IDE para programação com PHP, perdendo apenas para o Zend Studio, porém, livre, mais leve, e até mesmo com mais recursos, isso porque você pode adicionar mais ferramentas para editar arquivos HTML, JS, SQL, e até fluxogramas e ferramentas gráficas.</p>
<p>Ademais ele conta com um excelente controle de projetos, ajuda de contexto (inclusive para classes definidas pelo usuário)  e suporte a controle de versão com CVS ou SVN.</p>
<p><a href="http://blog.diovani.com/wp-content/uploads/2007/10/eclipse-context-help.png" title="eclipse-context-help.png"><img src="http://blog.diovani.com/wp-content/uploads/2007/10/eclipse-context-help.thumbnail.png" alt="eclipse-context-help.png" /></a> <a href="http://blog.diovani.com/wp-content/uploads/2007/10/eclipse-cvs.png" title="botões para sincronização com um repositório CVS"><img src="http://blog.diovani.com/wp-content/uploads/2007/10/eclipse-cvs.thumbnail.png" alt="botões para sincronização com um repositório CVS" /></a></p>
<p>O Eclipse pode ser adquirido pelo <a href="http://eclipse.org">website oficial</a> ou em distribuições customizadas para diversas linguagens. Eu recomendo o EasyEclipse para PHP, que pode ser aquirido <a href="http://easyeclipse.org">aqui</a>. Lembrando que mesmo as distribuições podem ser customizadas para adicionar mais e mais recursos. Ele também pode ser instalado via ap-get no Debian ou Ubuntu, mas as distribuições customizadas parecem bem mais completas e funcionais.</p>
<p>Recomendado!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.diovani.com/2007/10/03/php-eclipse/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Extreme Programming</title>
		<link>http://blog.diovani.com/2007/09/18/extreme-programming/</link>
		<comments>http://blog.diovani.com/2007/09/18/extreme-programming/#comments</comments>
		<pubDate>Tue, 18 Sep 2007 20:02:20 +0000</pubDate>
		<dc:creator>diovani</dc:creator>
				<category><![CDATA[curiosidades]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://blog.diovani.com/2007/09/18/extreme-programming/</guid>
		<description><![CDATA[
Na última sexta-feira meu professor de DSI (Desenvolvimento em Sistemas de Informação) apresentou uma nova abordagem em desenvolvimento de software com a aula mais dinâmica que já tive. Trata-se da Extreme Programming (XP) .
Esta é uma nova metodologia de desenvolvimento de software (com cerca de 8 anos), voltada a interatividade com o cliente, ao trabalho [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.extremeprogramming.org/images/xplogo.gif" height="62" width="108" /></p>
<p>Na última sexta-feira meu professor de DSI (Desenvolvimento em Sistemas de Informação) apresentou uma nova abordagem em desenvolvimento de software com a aula mais dinâmica que já tive. Trata-se da Extreme Programming (XP) .</p>
<p>Esta é uma nova metodologia de desenvolvimento de software (com cerca de 8 anos), voltada a interatividade com o cliente, ao trabalho em grupo e a dinâmica. Recomendada para desenvolvimento de softwares com requisitos vagos e que necessitem de constantes mudanças.</p>
<p>É baseada nas seguintes regras e práticas:</p>
<ul>
<li><strong>Planejamento</strong>
<ul>
<li> Problemas do usuário
<ul>
<li>São escritos pelos clientes especificando o que o sistema deve fazer por eles;</li>
<li>Estes Problemas assemelham-se ao uso de cenários, mas não limitados a descrever uma interface e são expressados em cerca de três sentenças escritas pelo cliente;</li>
</ul>
</li>
</ul>
<ul>
<li>Plano de Lançamento
<ul>
<li>Após os Problemas serem escritos, encontros são realizados para para criar o Plano de Lançamento;</li>
<li>Este Plano de Lançamento especifica que cartões serão implementados para cada lançamento e as datas destes lançamentos;</li>
</ul>
</li>
<li>Lançamentos Periódicos
<ul>
<li>O Time de desenvolvimento deve liberar pequenas versões interativas aos clientes periodicamente;</li>
<li>No próximo encontro os clientes expõe suas opiniões e satisfações sobre o projeto (Teste de Aceitação), o que permite ao time melhorar este de acordo com as necessidades do cliente;</li>
</ul>
</li>
<li>Velocidade do Projeto
<ul>
<li>A Velocidade do Projeto é medida conforme quanto trabalho é realizado no projeto;</li>
<li>Para medí-la, simplesmente adicione as estimativas de cada Problema resolvido durante a iteração;</li>
</ul>
</li>
<li>O projeto é dividido em Iterações
<ul>
<li>Desenvolvimento iterativo adiciona agilidade ao processo de desenvolvimento;</li>
<li>Divida o projeto em cerca de uma dúzia de iterações com uma a três semanas de duração;</li>
<li>Mantenha essa duração constante durante o projeto, é esta constante que torna a medida de progresso e o planejamento simples e confiável na XP;</li>
</ul>
</li>
<li>Plano de Iteração
<ul>
<li>Uma reunião é feita no início de cada Iteração para criar o plano daquela Iteração, os trabalhos de programação a serem realizados;</li>
<li>Problemas são escolhidos pelo cliente para esta Iteração, a partir do Plano de Lançamento, na ordem do mais importante para cliente primeiro;</li>
<li>O total de problemas é estimado de acordo com a velocidade do Projeto da última Iteração;</li>
<li>Testes de Aceitação falhos e que precisem de reparos também são selecionados;</li>
<li>Estes Problemas do Cliente e Testes de Aceitação são divididos em tarefas e anotados em Cartões;</li>
<li>Enquanto os Problemas são descritos na linguagem do Cliente, os Cartões são escritos na Linguagem doProgramador;</li>
<li>Programadores responsabilizam-se por estes Cartões e estimam quanto tempo suas tarefas levarão para serem completadas (geralmente 1 a 3 dias);</li>
</ul>
</li>
<li>Mude os Papéis
<ul>
<li>Os papéis de cada membro do time de programação devem ser trocados constantemente para evitar desperdício de conhecimento e &#8220;codificação viciada&#8221; destes;</li>
<li>Se apenas um membro é capaz de trabalhar em certa área, será um problema se esta pessoa sair do projeto ou você pode acabar com acumulo de tarefas para este;</li>
</ul>
</li>
<li>Reuniões em pé
<ul>
<li>Uma reunião em pé é realizada diariamente;</li>
<li>Comunicação entre o time de projeto é a intenção desta reunião;</li>
<li>O conhecimento de cada um é dispersado e compartilhado, assim como uma visão geral do andamento do projeto;</li>
<li>Reuniões em pé tentem a ser rápidas e dinâmicas, e impede que o time distraia-se com futilidades;</li>
</ul>
</li>
<li>&#8220;Conserte a XP quando ela quebrar&#8221;
<ul>
<li>Nào dizemos &#8217;se&#8217; porque obviamente serão necessárias modificações e adaptações para cada projeto;</li>
<li>Não exite em descartar as opções que não funcionarem e adicionar novas.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Estas são as práticas da fase de planejamento, não pretendo me extender aqui a ponto de descrever todas as fases, mas vou ressaltar alguns outros pontos importantes:</p>
<ul>
<li>Simplicidade
<ul>
<li>Um projeto simples leva menos tempo para ser desenvolvido que um complexo;</li>
<li>Sempre faça o mais simples possível que funcione;</li>
</ul>
</li>
<li>O Cliente está sempre disponível
<ul>
<li>Um dos principais requerimentos das Programação XP é comunicação constante com o cliente, preferencialmente face a face;</li>
<li>Não apenas para ajudar a equipe de projeto, mas sim como parte da própria equipe;</li>
</ul>
</li>
<li>Programação em duplas
<ul>
<li>Toda a programação a ser incluída no projeto deve ser realizada por duas pessoas trabalhando juntas no mesmo computador;</li>
<li>Programação em duplas aumenta a qualidade do software sem impacto no prazo de entrega.</li>
</ul>
</li>
</ul>
<p>É notavel na programação XP que suas práticas são voltadas muito mais para a programação do que para a documentação e planejamento do projeto. Isto pode causar um grande impacto sobre os tabus de que a documentação é até mais importantes que a programação em si. Obviamente a documentação não deve ser descartada, mas também pode ser realizada dinamicamente durante os encontros/reuniões, desde anotações simples até gravação das sessões.</p>
<p>O suporte também não fica prejudicado pela falta de documentação apropriada. Uma vez que o conhecimento sobre o projeto é difundido sobre a equipe, fica relativamente fácil realizar modificações e aprimoramentos.</p>
<p>A imagem a baixo é um diagrama interativo da metodologia de programação XP. Hospedado em <a href="http://www.extremeprogramming.org/">http://www.extremeprogramming.org/</a>, que também foi minha maior fonte para este artigo. Leitura recomendada&#8230;</p>
<p align="center"><a href="http://www.extremeprogramming.org/map/project.html"><img src="http://www.extremeprogramming.org/map/images/projectsml.gif" height="122" width="300" /></a></p>
<p align="left"><em>Fontes: <a href="http://www.extremeprogramming.org">http://www.extremeprogramming.org</a>, <a href="http://en.wikipedia.org/wiki/Extreme_programming">http://en.wikipedia.org/wiki/Extreme_programming</a>, <a href="http://pt.wikipedia.org/wiki/Extreme_programming">http://pt.wikipedia.org/wiki/Extreme_programming</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.diovani.com/2007/09/18/extreme-programming/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ajuda de Contexto com CSS</title>
		<link>http://blog.diovani.com/2007/08/13/ajuda-de-contexto-com-css/</link>
		<comments>http://blog.diovani.com/2007/08/13/ajuda-de-contexto-com-css/#comments</comments>
		<pubDate>Mon, 13 Aug 2007 16:52:59 +0000</pubDate>
		<dc:creator>diovani</dc:creator>
				<category><![CDATA[Sem Categoria]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://blog.diovani.com/2007/08/13/ajuda-de-contexto-com-css/</guid>
		<description><![CDATA[Quando construímos sistemas ou administração de sites é muito útil adicionar ajuda de contexto em alguns items (ao passar o mouse sobre um item um pequeno texto explicativo é exibido), mais ou menos assim:
  a.help {text-decoration:underline;} a.help span {position:absolute;display:none; } a.help:hover {background-color:black;} a.help:hover span {display:block;  margin-top: 0px; margin-left: 10px; border:1px solid white;  [...]]]></description>
			<content:encoded><![CDATA[<p>Quando construímos sistemas ou administração de sites é muito útil adicionar ajuda de contexto em alguns items (ao passar o mouse sobre um item um pequeno texto explicativo é exibido), mais ou menos assim:</p>
<style type="text/css">  a.help {text-decoration:underline;} a.help span {position:absolute;display:none; } a.help:hover {background-color:black;} a.help:hover span {display:block;  margin-top: 0px; margin-left: 10px; border:1px solid white;     background-color:#ffa303; color:white; text-decoration:none; font-size:12px; } </style>
<p><a href="http://blog.diovani.com/wp-admin/post-new.php#" class="help">Link com ajuda<span>A ajuda de contexto vai aqui,<br />
aparecendo somente quando o<br />
usuário passa o mouse sobre o link</span></a></p>
<p>Existem várias bibliotecas JavaScript para utilizar este efeito, como a <a href="http://www.bosrup.com/web/overlib/">Overlib</a> e também <a href="http://script.aculo.us">script.aculo.us</a>, que tem um efeito parecido. Utilizando Js você tem efeitos mais interessantes, com a ajuda seguindo o mouse, etc, mas se precisar apenas de uma ajuda de contexto simples e leve, podemos fazê-lo apenas com CSS.</p>
<p>O conteito é bem simples&#8230;<br />
Crie uma âncora &lt;a&gt;, com um  span &lt;span&gt; dentro dela, que não é exibido (display:none), no estado Hover da âncora, o &lt;span&gt; terá &#8216;display:block&#8217;.</p>
<p>Como &#8220;um código vale mais que mil palavras&#8221;, aqui vai um exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/* Este é o estilo da âncora e span para o efeito */</span>
&nbsp;
a<span style="color: #6666ff;">.help</span>
<span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">text-decoration</span><span style="color: #00AA00;">:</span><span style="color: #993333;">underline</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span> 
&nbsp;
a<span style="color: #6666ff;">.help</span> span
<span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span><span style="color: #993333;">absolute</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* para não alterar o
                         posicionamento da ancora */</span>
    <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span><span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span> 
&nbsp;
a<span style="color: #6666ff;">.help</span><span style="color: #3333ff;"><span style="color: #00AA00;">:</span>hover
</span><span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span><span style="color: #000000; font-weight: bold;">black</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* devido a um bug
                         no ie6 você deve alterar o
                         fundo (na verdade pode usar
                         a mesma cor, mas deve declará-la
                         aqui) do link ao passar o
                         mouse (???),
                         caso contrário o &lt;span&gt; não
                         aparecerá no ie6 */</span>
<span style="color: #00AA00;">&#125;</span> 
&nbsp;
a<span style="color: #6666ff;">.help</span><span style="color: #3333ff;">:hover </span>span
<span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span><span style="color: #993333;">block</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* por último, o &lt;span&gt;,
                        dentro do &lt;/span&gt;&lt;/span&gt;,
                        fica com 'display:block' ao
                        passar do mouse */</span>
&nbsp;
     <span style="color: #808080; font-style: italic;">/* os demais estilos deste elemento não são
    necessários, apenas para melhorar o visual
    e você pode alterá-los a vontade*/</span>
    <span style="color: #000000; font-weight: bold;">margin-top</span><span style="color: #00AA00;">:</span> <span style="color: #933;">0px</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">margin-left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">10px</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span><span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #993333;">white</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#ffa303</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #993333;">white</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">text-decoration</span><span style="color: #00AA00;">:</span><span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span><span style="color: #933;">12px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Após definir o estilo, o código HTML para usá-lo é ainda mais simples:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;a href=&quot;#&quot; class=&quot;help&quot;&gt;
    Link com ajuda
    &lt;span&gt;
        A ajuda de contexto vai aqui,
&nbsp;
        aparecendo somente quando o
&nbsp;
        usuário passa o mouse sobre o link
    &lt;/span&gt;
&lt;/a&gt;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.diovani.com/2007/08/13/ajuda-de-contexto-com-css/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Highslide no Wordpress</title>
		<link>http://blog.diovani.com/2007/08/06/highslide-no-wordpress/</link>
		<comments>http://blog.diovani.com/2007/08/06/highslide-no-wordpress/#comments</comments>
		<pubDate>Mon, 06 Aug 2007 14:02:31 +0000</pubDate>
		<dc:creator>diovani</dc:creator>
				<category><![CDATA[Sem Categoria]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[highslide]]></category>
		<category><![CDATA[imagem]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[multimídia]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.diovani.com/?p=68</guid>
		<description><![CDATA[O highslide é um visualizador de miniaturas feito em JavaScript. Ele exibe as imagens em pop-ups sobre sua página (em html, nao novas janelas), podendo ser movidos ou abertos em sequencia. O efeito visual é melhor que qualquer visualizador de imagens já visto, mesmo em sistemas operacionais. Veja minhas imagens e screenshots para ter uma [...]]]></description>
			<content:encoded><![CDATA[<p>O highslide é um visualizador de miniaturas feito em JavaScript. Ele exibe as imagens em pop-ups sobre sua página (em html, nao novas janelas), podendo ser movidos ou abertos em sequencia. O efeito visual é melhor que qualquer visualizador de imagens já visto, mesmo em sistemas operacionais. Veja minhas imagens e screenshots para ter uma idéia.  Vou mostrar aqui como intalar o plugin para Wordpress e como adicionar automaticamente o highslide a TODAS as imagens do blog, sem precisar editar os posts antigos.</p>
<blockquote><p><em>O visualizador de miniaturas Highslide é free para uso não-comercial, e custa  $29, dólares para cada domínio deu8m website comercial, então, caso você possua um blog comercial (?) você deverá pagar pelo Highslide.js. Veja a <a href="http://vikjavev.no/highslide/#licence">licença</a>. </em></p></blockquote>
<p>Primeiramente, baixe e instale o plugin <a href="http://wordpress.org/extend/plugins/wp-highslide-image-viewer/">wp-highslide</a> (descompacte-o dentro de uma pasta &#8216;highslide&#8217; em wp-content/plugins/) e também baixe a biblioteca <a href="http://vikjavev.no/highslide/">highslide</a> (copie apenas o arquivo highslide.js para dentro de wp-content/plugins/highslide). Após isso vá em &#8216;Plugins&#8217; (ou &#8216;Extenções&#8217;, em português), na administração de seu blog e ative o wp-highslide.  Com isso você terá o plugins instalado, podendo usar a tag &lt;highslide&gt;&lt;/highslide&gt; para adicionar miniaturas usando a biblioteca, o que é um saco. Então, para facilitar as coisas, vá em &#8216;Opções&#8217; e clique em &#8216;wp-highslide&#8217;, ajuste as opções como deseja e em &#8216;JAVASCRIPT settings&#8217; adicione o seguinte:</p>
<p>Caso seu tema não utilize &#8216;<a href="http://prototypejs.org/">prototype</a>&#8216; (um framework JavaScript), adicione no início do textarea o seguinte código:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;script&gt;
src=&quot;http://prototypejs.org/assets/2007/6/20/prototype.js&quot;
 type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre></div></div>

<p>E abaixo da linha: <strong>&#8216;hs.preloadImages();&#8217;</strong></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> elements <span style="color: #339933;">=</span> $A<span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'a'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
elements.<span style="color: #660066;">each</span>
<span style="color: #009900;">&#40;</span>
    <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>element<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>element.<span style="color: #660066;">href</span>.<span style="color: #660066;">endsWith</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'jpg'</span><span style="color: #009900;">&#41;</span>
            <span style="color: #339933;">||</span> element.<span style="color: #660066;">href</span>.<span style="color: #660066;">endsWith</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'png'</span><span style="color: #009900;">&#41;</span>
            <span style="color: #339933;">||</span> element.<span style="color: #660066;">href</span>.<span style="color: #660066;">endsWith</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'gif'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            element.<span style="color: #660066;">className</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'highslide'</span><span style="color: #339933;">;</span>
&nbsp;
            Event.<span style="color: #660066;">observe</span>
            <span style="color: #009900;">&#40;</span>
                element<span style="color: #339933;">,</span>
                <span style="color: #3366CC;">'click'</span><span style="color: #339933;">,</span>
                <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span>
                <span style="color: #009900;">&#123;</span>
                    Event.<span style="color: #000066;">stop</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #003366; font-weight: bold;">var</span> element <span style="color: #339933;">=</span> Event.<span style="color: #660066;">element</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #000066; font-weight: bold;">return</span> hs.<span style="color: #660066;">expand</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</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: #009900;">&#41;</span></pre></div></div>

<p>Isso vai adicionar automaticamente o Highslide a todos os links para imagens da página, inclusive dos posts antigos.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.diovani.com/2007/08/06/highslide-no-wordpress/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Funções com número variável de argumentos</title>
		<link>http://blog.diovani.com/2007/07/11/funcoes-com-numero-variavel-de-argumentos/</link>
		<comments>http://blog.diovani.com/2007/07/11/funcoes-com-numero-variavel-de-argumentos/#comments</comments>
		<pubDate>Wed, 11 Jul 2007 20:25:37 +0000</pubDate>
		<dc:creator>diovani</dc:creator>
				<category><![CDATA[Sem Categoria]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://blog.diovani.com/?p=57</guid>
		<description><![CDATA[Quando você não sabe quantos parâmetros uma função deverá receber, pode utilizar uma função com número indefinido de parâmetros (geralmente documentadas como function name ([param [, param [, ...]]])).
Para isto o PHP4 (e posteriores) possui três funções específicas, que obtém o número e quantidade de parâmetros enviados a função, func_num_args(), func_get_arg() e func_get_args(). Estas funções [...]]]></description>
			<content:encoded><![CDATA[<p>Quando você não sabe quantos parâmetros uma função deverá receber, pode utilizar uma função com número indefinido de parâmetros (geralmente documentadas como <strong>function name ([param [, param [, ...]]]))</strong>.</p>
<p>Para isto o PHP4 (e posteriores) possui três funções específicas, que obtém o número e quantidade de parâmetros enviados a função, <a href="http://php.net/func_num_args()">func_num_args()</a>, <a href="http://php.net/func_get_arg()">func_get_arg()</a> e <a href="http://php.net/func_get_args()">func_get_args()</a>. Estas funções devem utilizadas dentro de sua função. Veja o código a seguir:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">/*diz olá a todos os nome enviados
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> sayHelloToAll <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$numArgs</span> <span style="color: #339933;">=</span> <span style="color: #990000;">func_num_args</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$argList</span> <span style="color: #339933;">=</span> <span style="color: #990000;">func_get_args</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> <span style="color: #000088;">$numArgs</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Hello {<span style="color: #006699; font-weight: bold;">$argList</span>[<span style="color: #006699; font-weight: bold;">$i</span>]}n&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//imprime:</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//'Hello Paulo'</span>
<span style="color: #666666; font-style: italic;">//'Hello Diovani'</span>
<span style="color: #666666; font-style: italic;">//'Hello SamuraiDio'</span>
sayHelloToAll <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Paulo'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Diovani'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'SamuraiDio'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Você poderá usar um <a href="http://php.net/foreach()">foreach()</a> para navegar entre os parâmetros obtidos em $argList, mas não é recomendável, visto que gerará um erro caso não seja passado nenhum parâmetro a função (a menos que você inicialize a variável previamente).</p>
<p>Caso precise declarar uma função que receba ou não apenas dois ou três parâmetros, no máximo, seria preferível utilizar uma função com argumentos não obrigatórios (<a href="http://the.blog.br/samuraidio/2007/07/11/parametros-opcionais-em-funcoes/">post anterior</a>), pois será mais seguro, e você poderá prever melhor o resultado de seu sistema.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.diovani.com/2007/07/11/funcoes-com-numero-variavel-de-argumentos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parâmetros opcionais em Funções</title>
		<link>http://blog.diovani.com/2007/07/11/parametros-opcionais-em-funcoes/</link>
		<comments>http://blog.diovani.com/2007/07/11/parametros-opcionais-em-funcoes/#comments</comments>
		<pubDate>Wed, 11 Jul 2007 19:43:21 +0000</pubDate>
		<dc:creator>diovani</dc:creator>
				<category><![CDATA[Sem Categoria]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://blog.diovani.com/?p=56</guid>
		<description><![CDATA[Este post é um complemento para o próximo post. Como minha intenção era falar sobre funções com número de parâmetros indefinidos, achei melhor postar primeiro sobre funções com parâmetros opcionais, uma vez que, na maioria dos casos, esta solução é suficiente.
Caso precise declarar uma função que receba de 0 a n parâmetros, desde que n [...]]]></description>
			<content:encoded><![CDATA[<p>Este post é um complemento para o próximo post. Como minha intenção era falar sobre funções com número de parâmetros indefinidos, achei melhor postar primeiro sobre funções com parâmetros opcionais, uma vez que, na maioria dos casos, esta solução é suficiente.</p>
<p>Caso precise declarar uma função que receba de 0 a n parâmetros, desde que n seja um quantidade definida, podemos utilizar funções com parâmetros opcionais, estes parâmetros terão um valor padrão (sempre uma constante, nunca uma variável) que será utilizado caso não seja passado nenhum parâmetro à função. Veja o exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> sayHello <span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> ‘SamuraiDio’<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> “Hello <span style="color: #000088;">$name</span>”<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">sayHello <span style="color: #009900;">&#40;</span>’Paulo Diovani’<span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//imprime ‘Hello Paulo Diovani’</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">sayHello <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//imprime ‘Hello SamuraiDio’</span></pre></div></div>

<p>Os últimos parâmetros que devem ser os opcionais, no caso de mais de um parâmetro.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">/*funciona, desde que seja passado o
 *primeiro parâmetro, pelo menos
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> sayHello <span style="color: #009900;">&#40;</span><span style="color: #000088;">$name1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$name2</span> <span style="color: #339933;">=</span> ‘SamuraiDio’<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> “Hello <span style="color: #000088;">$name</span>”<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">/*não funciona, pois a função esperará pelo
*segundo parâmetro,
*e para este ser informado deverá ser
*também informado o primeiro
*/</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> sayHello <span style="color: #009900;">&#40;</span><span style="color: #000088;">$name1</span> <span style="color: #339933;">=</span> ‘SamuraiDio’<span style="color: #339933;">,</span> <span style="color: #000088;">$name</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> “Hello <span style="color: #000088;">$name</span>”<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Este método para declarar funções é muito útil, e geralmente usado em funções de ordenação e afins:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">/*ordena o array passado em $array
*em ordem crescente.
*se o segundo parâmetro for passado
*como TRUE, o array será
*ordenado em ordem decrescente.
*/</span>
<span style="color: #000000; font-weight: bold;">function</span> arrayOrder <span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span><span style="color: #000088;">$array</span><span style="color: #339933;">,</span> <span style="color: #000088;">$desc</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">FALSE</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: #000088;">$desc</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">sort</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</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;">rsort</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Esse tipo de função, com parâmetros opcionais, geralmente são documentadas da seguinte forma: <strong>array arraySort ( array array [, bool desc] )</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.diovani.com/2007/07/11/parametros-opcionais-em-funcoes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

