<?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>bittersweet dev</title>
	<atom:link href="http://blog.hboaventura.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.hboaventura.com</link>
	<description>'cause that's the dev life</description>
	<lastBuildDate>Mon, 26 Oct 2009 11:03:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>PHP: Usando a Classe DateTime para manipular datas</title>
		<link>http://blog.hboaventura.com/php-usando-a-classe-datetime-para-manipular-datas/</link>
		<comments>http://blog.hboaventura.com/php-usando-a-classe-datetime-para-manipular-datas/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 18:12:14 +0000</pubDate>
		<dc:creator>kidh0</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WebDev]]></category>

		<guid isPermaLink="false">http://blog.hboaventura.com/?p=241</guid>
		<description><![CDATA[
Quem em algum momento da vida já precisou trabalhar com datas em PHP, seja comparação ou manipulação, sabe que isso é uma grande dor de cabeça. Não que isso seja difícil de fazer, mas o PHP (até a versão 5.2, pelo menos) não tinha suporte a operações com data. Sempre que era necessário fazer uma [...]

<br/><br/>
<strong>Sem Posts Relacionados.</strong>]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-233 alignleft" title="php" src="http://blog.hboaventura.com/wp-content/uploads/2009/07/php-300x158.png" alt="PHP" width="210" height="111" /></p>
<p>Quem em algum momento da vida já precisou trabalhar com datas em PHP, seja comparação ou manipulação, sabe que isso é uma grande dor de cabeça. Não que isso seja difícil de fazer, mas o PHP (até a versão 5.2, pelo menos) não tinha suporte a operações com data. Sempre que era necessário fazer uma verificação se uma data era maior que outra, ou adicionar dias, era uma gambiarra sem fim. E gambiarra é ruim, muito ruim.</p>
<p>Eis que a versão 5.2 do PHP trás uma novidade que acalmou os já saturados nervos de quem necessita desse tipo de controle em seus sistemas. Foram adicionadas ao core do PHP, 4 classes para dar o suporte necessário a manipulação de datas:</p>
<ul>
<li> <a href="http://br.php.net/manual/en/class.datetime.php">DateTime</a></li>
<li> <a href="http://br.php.net/manual/en/class.dateinterval.php">DateInterval</a></li>
<li><a href="http://br.php.net/manual/en/class.dateperiod.php">DatePeriod</a></li>
<li><a href="http://br.php.net/manual/en/class.datetimezone.php">DateTimeZone</a></li>
</ul>
<p>Como não tem nenhuma necessidade de replicar a documentação do PHP (que já é bem completa), não vou colocar todos os métodos e atributos que cada classe tem, caso tenha curiosidade (e todo desenvolvedor deve ter), clique nos links e leia a doc de cada uma delas.</p>
<p>Vamos então colocar em prática cada uma dessas classes. Show me the code!</p>
<h2>Criando e exibindo uma data formatada</h2>
<p>Vamos começar então criando um objeto do tipo DateTime e exibindo ele formatado na tela:</p>
<h3>Exemplo 1</h3>
<pre class="php" name="code">//Cria o objeto do tipo DateTime, se não passar
// nada no construtor, assume now;
$date_now = new DateTime();
//usando as constantes da classe DateTime
echo $date_now-&gt;format(DATE_RSS);
//mostra Fri, 23 Oct 2009 14:27:51 -0200</pre>
<ul>
<li> Linha 3: criamos o objeto sem atribuir nada, com isso, ele assume a data atual(now) do sistema.</li>
<li>Linha 5: usamos a função <a href="http://br.php.net/manual/en/datetime.format.php">format()</a> utilizando as <a href="http://br.php.net/manual/en/class.datetime.php#datetime.constants.types">constantes</a> da classe DateTime</li>
</ul>
<h3>Exemplo 2</h3>
<pre class="php" name="code">//Cria o objeto do tipo DateTime, atribuindo uma string
//usando o formato suportado pela funcao strtotime()
$date_build = new DateTime('2009-10-10');
//usando o formato suportado pela funcao date()
echo $date_build-&gt;format('d/m/Y');
//mostra 10/10/2009</pre>
<ul>
<li> Linha 3: criamos o objeto atribuindo uma string num formato suportado pela função <a href="http://br.php.net/manual/en/function.strtotime.php">strtotime()</a></li>
<li>Linha 5: usamos a função <a href="http://br.php.net/manual/en/datetime.format.php">format()</a>, mas dessa vez, especificamos o formato da data conforme a função <a href="http://br.php.net/manual/en/function.date.php">date()</a></li>
</ul>
<p>Até agora, nenhuma novidade, já podíamos fazer isso antes até com menos esforço(!?), mas o pulo do gato (não me pergunte de onde tirei esse jargão) ainda está por vir&#8230;</p>
<h2>Comparação entre datas</h2>
<p>Uma outra melhoria que essa classe nos trás é a comparação de datas. Antes, tinhamos um trabalho tremendo para fazer comparação de datas:<br />
Exemplo de POG:</p>
<pre class="php" name="code">$date1 = str_replace('-','','2009-10-10');
$date2 = str_replace('-','','2009-10-12');
if ($date1 &gt; $date2) {
    //faz algo macabro
}</pre>
<p>E isso é chato, e deixa seu código horrível.</p>
<p>Veja como ficou simples fazer a comparação de data usando o DateTime()</p>
<h3>Exemplo</h3>
<pre class="php" name="code">$date1 = new DateTime('2009-10-10');
$date2 = new DateTime('2009-12-10');
if ($date1 &lt; $date2) {
    //faz algo de uma maneira correta
}</pre>
<p>Sim! A comparação é feita direto entre os objetos, como mágica (brincadeira, é lógica pura)! Isso é uma das features que mais me chamaram a atenção, justamente pela simplicidade do uso. Mas a melhor parte ainda está por vir&#8230;</p>
<h2>Intervalo entre datas</h2>
<p>Eu não me lembro de ter feito isso em PHP (ainda bem) mas calcular o intervalo entre datas também foi facilitado:</p>
<pre class="php" name="code">$date1 = new DateTime('2009-10-10');
$date2 = new DateTime('2010-10-10');

//calcula a diferenca entre as duas datas
$diff = $date1-&gt;diff($date2);

//mostra o numero de dias entre as datas
echo $diff-&gt;days . ' dias ';</pre>
<ul>
<li>Linha 1 e 2: Cria duas datas do tipo DateTime;</li>
<li>Linha 5: O metodo <a href="http://br.php.net/manual/en/datetime.diff.php">diff()</a> da classe DateTime retorna um objeto do tipo <a href="http://br.php.net/manual/en/class.dateinterval.php">DateInterval</a>;</li>
<li>Linha 8: Retorna a quantidade de dias entre as datas</li>
</ul>
<h2>Manipulação de datas</h2>
<p>Agora o santo graal em se tratando de datas no PHP, a manipulação de datas, ou seja, poder adicionar/subtrair dias, meses, anos, whatever de uma data:</p>
<h3>Exemplo 1</h3>
<pre class="php" name="code">$date1 = new DateTime('2009-10-10');
//imprime 10/10/2009
echo $date1-&gt;format('d/m/Y');

//adiciona 1 semana na data
$date1-&gt;add(new DateInterval('P1W'));
//imprime 17/10/2009
echo $date1-&gt;format('d/m/Y');

//remove 2 dias da data
$date1-&gt;sub(new DateInterval('P2D'));
//imprime 15/10/2009
echo $date1-&gt;format('d/m/Y');</pre>
<p>Tanto o método <a href="http://br.php.net/manual/en/datetime.add.php">add()</a> quando o método <a href="http://br.php.net/manual/en/datetime.sub.php">sub()</a> esperam receber um objeto do tipo <a href="http://br.php.net/manual/en/class.dateinterval.php">DateInterval</a>. O DateInterval cria um intervalo de datas e recebe como parametro, que deve sempre iniciar por &#8220;P&#8221; (sem as aspas, de Período) seguido pelo periodo, por exemplo P1M (periodo de 1 mês). Na <a href="http://br.php.net/manual/en/dateinterval.construct.php">documentação</a> do construtor do objeto tem todas as opções aceitas.</p>
<h3>Exemplo 2</h3>
<p>Também podemos usar o método <a href="http://br.php.net/manual/en/datetime.modify.php">modify()</a> para fazer essa manipulação da data.</p>
<pre class="php" name="code">$date1 = new DateTime('2009-10-10');
//imprime 10/10/2009
echo $date1-&gt;format('d/m/Y');

//adiciona 1 semana na data
$date1-&gt;modify('+1 week');
//imprime 17/10/2009
echo $date1-&gt;format('d/m/Y');

//remove 2 dias da data
$date1-&gt;modify('-2 days');
//imprime 15/10/2009
echo $date1-&gt;format('d/m/Y');</pre>
<p>A diferença é que o método modify() recebe qualquer string aceita no método strtotime(), não necessitando instanciar um objeto DateInterval.</p>
<p>Bueno, por hoje é só pessoal, prometo não demorar tanto no próximo artigo, até porque o PHP 5.3 tem várias novidades muito interessantes. Aguardem&#8230;</p>


<br/><br/><p><strong>Sem Posts Relacionados.</strong></p>]]></content:encoded>
			<wfw:commentRss>http://blog.hboaventura.com/php-usando-a-classe-datetime-para-manipular-datas/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP: Instalando a extensão SVN no Ubuntu 9.04</title>
		<link>http://blog.hboaventura.com/php-instalando-a-extensao-svn-no-ubuntu-9-04/</link>
		<comments>http://blog.hboaventura.com/php-instalando-a-extensao-svn-no-ubuntu-9-04/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 02:30:43 +0000</pubDate>
		<dc:creator>kidh0</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.hboaventura.com/?p=225</guid>
		<description><![CDATA[
Recentemente estive envolvido em um projeto que necessitava interagir com um repositório SVN (controle de versão? Não tem idéia do que é isso? Dê uma lida neste artigo). Era o básico, checkout e commit de arquivos, nada muito complexo. Para minha surpresa, o PHP não tem nenhuma função nativa de acesso a repositórios SVN, então [...]

<br/><br/>
<strong>  Leia também:</strong><ol><li><a href='http://blog.hboaventura.com/instalando-o-firefox-3-5-no-ubuntu-9-04/' rel='bookmark' title='Permanent Link: [update] Instalando o Firefox 3.5 no Ubuntu 9.04'>[update] Instalando o Firefox 3.5 no Ubuntu 9.04</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-233 alignleft" style="margin: 5px;" title="php" src="http://blog.hboaventura.com/wp-content/uploads/2009/07/php-300x158.png" alt="PHP" width="240" height="126" /></p>
<p>Recentemente estive envolvido em um projeto que necessitava interagir com um repositório SVN (controle de versão? Não tem idéia do que é isso? Dê uma lida neste <a href="http://pt.wikipedia.org/wiki/Sistema_de_controle_de_vers%C3%A3o" target="_blank">artigo</a>). Era o básico, checkout e commit de arquivos, nada muito complexo. Para minha surpresa, o PHP não tem nenhuma função nativa de acesso a repositórios SVN, então a busca pela iluminação começou.</p>
<p>Primeiro pensei em usar a função exec() e só passar os comandos para ela. Isso resolve, mas é um tanto quando deselegante, pessoalmente achei até um pouco grosseiro, além de que rodar um exec() no servidor nunca é bem visto. <span style="text-decoration: line-through;">Mas funciona!</span></p>
<p>Como a idéia é sempre a melhor implementação (ou pelo menos o mais próximo possível disso), continuei minhas buscas pelo <a href="http://www.google.com" target="_blank">oráculo</a>. Acabei me deparando com uma extensão <a href="http://pecl.php.net/" target="_blank">PECL</a> que fazia exatamente o que eu precisava, a <a href="http://us3.php.net/manual/en/book.svn.php" target="_blank">PHP SVN</a>.</p>
<p>Dentre a lista de funções existentes, estão as funções básicas que eu precisava, checkout e commit , até mais avançadas, com parâmetros para a autenticação em servidores que requerem tal segurança.</p>
<h3>Instalação</h3>
<p>A instalação via <a href="http://pecl.php.net/" target="_blank">PECL</a> é bem simples, se não fosse por alguns problemas de dependência  que encontrei pelo caminho. Como não há necessidade alguma de vocês passarem pelos mesmos &#8220;apertos&#8221; pelos quais eu passei, segue o passo a passo:</p>
<h4>1º Passo &#8211; As dependências</h4>
<p>Existem algumas dependências necessárias para instalar o pacote PECL do SVN, segue o comando para instalar todas:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> update <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> php5-dev libsvn-dev \
libsasl2-dev libsasl2-modules-ldap libneon27-gnutls-dev</pre></div></div>

<h4>2º Passo &#8211; O pacote PECL</h4>
<p>Depois de as dependências todas estarem instaladas, vamos para a instalação do pacote PECL SN:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> pecl <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #660033;">-f</span> <span style="color: #c20cb9; font-weight: bold;">svn</span></pre></div></div>

<h4>3º Passo &#8211; Configurando o PHP.ini</h4>
<p>Para finalizar, como super usuário, digite o seguinte comando no terminal:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">extension</span>=svn.so <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>php.ini</pre></div></div>

<p>Feito isso, para o apache reconhecer a extensão, ele deve ser reiniciado:</p>

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

<p>Pronto! Já estão disponíves no servidor as <a href="http://us3.php.net/manual/en/ref.svn.php" target="_blank">funções</a> da extensão em seus scripts.</p>
<p>Referências:</p>
<ul>
<li><a href="http://us3.php.net/manual/en/book.svn.php" target="_blank">http://us3.php.net/manual/en/book.svn.php</a></li>
<li><a href="http://ubuntuforums.org/showthread.php?p=2143883" target="_blank">http://ubuntuforums.org/showthread.php?p=2143883</a></li>
<li><a href="http://hasin.wordpress.com/2008/04/21/installing-pecl-subversion-extension-for-php-in-ubuntu-710/" target="_blank">http://hasin.wordpress.com/2008/04/21/installing-pecl-subversion-extension-for-php-in-ubuntu-710/</a></li>
</ul>


<br/><br/><p><strong>  Leia também:</strong><ol><li><a href='http://blog.hboaventura.com/instalando-o-firefox-3-5-no-ubuntu-9-04/' rel='bookmark' title='Permanent Link: [update] Instalando o Firefox 3.5 no Ubuntu 9.04'>[update] Instalando o Firefox 3.5 no Ubuntu 9.04</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.hboaventura.com/php-instalando-a-extensao-svn-no-ubuntu-9-04/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS3: propriedade box-shadow</title>
		<link>http://blog.hboaventura.com/css3-propriedade-box-shadow/</link>
		<comments>http://blog.hboaventura.com/css3-propriedade-box-shadow/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 16:04:51 +0000</pubDate>
		<dc:creator>kidh0</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://blog.hboaventura.com/?p=198</guid>
		<description><![CDATA[Continuando o assunto CSS3 e as maravilhas que ele nos trará, hoje apresentarei a propriedade box-shadow. Com esta propriedade podemos aplicar sombras em elementos utilizando somente CSS. Assim como o text-shadow, essa propriedade veio trazer um pouco de alívio para webdevelopers e webdesigners. Onde antes eram necessárias imagens, definições de backgrounds, POG&#8217;s e outras práticas [...]

<br/><br/>
<strong>  Leia também:</strong><ol><li><a href='http://blog.hboaventura.com/css3-propriedade-text-shadow/' rel='bookmark' title='Permanent Link: CSS3: propriedade text-shadow'>CSS3: propriedade text-shadow</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-147 alignleft" title="CSS" src="http://blog.hboaventura.com/wp-content/uploads/2009/07/css-300x184.jpg" alt="CSS" width="216" height="132" />Continuando o assunto CSS3 e as maravilhas que ele nos trará, hoje apresentarei a propriedade <a href="http://www.w3.org/TR/css3-background/#the-box-shadow" target="_blank">box-shadow</a>. Com esta propriedade podemos aplicar sombras em elementos utilizando somente CSS. Assim como o <a href="http://blog.hboaventura.com/css3-propriedade-text-shadow/" target="_blank">text-shadow</a>, essa propriedade veio trazer um pouco de alívio para webdevelopers e webdesigners. Onde antes eram necessárias imagens, definições de backgrounds, <a href="http://desciclo.pedia.ws/wiki/POG" target="_blank">POG&#8217;s</a> e outras práticas não menos nocivas, agora há possibilidade de definição direto no seu CSS. Não é uma maravilha esse pessoal da <a href="http://www.w3.org/" target="_blank">W3C</a>?</p>
<h3>Definição</h3>
<p>A propriedade box-shadow pode ser aplicada a qualquer elemento e é aceito atualmente pelo Firefox 3.5+ (utilizando o prefixo -moz a propriedade) e pelo Safari 3.1+ (utilizando o prefixo -webkit a propriedade). Não preciso dizer que os &#8211;projetos de browsers&#8211; de Redmond não aceitam (ainda) esta propriedade.</p>
<p>O box-shadow não faz parte do box-shadow, ou seja, não influencia no tamanho total que o elemento terá na tela.</p>
<p>A propriedade é declarada da seguinte maneira:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">box-shadow<span style="color: #00AA00;">:</span><span style="color: #933;">5px</span> <span style="color: #933;">5px</span> <span style="color: #933;">10px</span> <span style="color: #cc00cc;">#ccc</span><span style="color: #00AA00;">;</span>
<span style="color: #808080; font-style: italic;">/* implementação para o firefox */</span>
-moz-box-shadow<span style="color: #00AA00;">:</span><span style="color: #933;">5px</span> <span style="color: #933;">5px</span> <span style="color: #933;">10px</span> <span style="color: #cc00cc;">#ccc</span><span style="color: #00AA00;">;</span>
<span style="color: #808080; font-style: italic;">/* implementação para safari */</span>
-webkit-box-shadow<span style="color: #00AA00;">:</span><span style="color: #933;">5px</span> <span style="color: #933;">5px</span> <span style="color: #933;">10px</span><span style="color: #00AA00;">,</span> <span style="color: #cc00cc;">#ccc</span><span style="color: #00AA00;">;</span></pre></div></div>

<p>Onde:</p>
<ul>
<li> o primeiro valor é a posição horizontal da sombra em relação ao elemento. Valor positivo projeta a sombra para a direita e negativo para a esquerda;</li>
<li>o segundo valor é a posição vertical da sombra em relação ao elemento. Valor positivo projeta a sombra para baixo e negativo, adivinhem?, para cima;</li>
<li>o terceiro valor é o blur da sombra, só aceita valores positivos ou 0 (zero);</li>
<li>o quarto e último valor é a cor da sombra;</li>
</ul>
<p>A propriedade aceita multiplas sombras. Podemos implementar inúmeros efeitos desta forma. Para isso é só separar a declaração de cada sombra com vírgulas:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">box-shadow<span style="color: #00AA00;">:</span> <span style="color: #933;">5px</span> <span style="color: #933;">5px</span> <span style="color: #933;">10px</span> <span style="color: #cc00cc;">#333</span><span style="color: #00AA00;">,</span> <span style="color: #933;">-5px</span> <span style="color: #933;">-5px</span> <span style="color: #933;">10px</span> <span style="color: #cc00cc;">#ccc</span><span style="color: #00AA00;">;</span></pre></div></div>

<h3>Exemplos</h3>
<p>Vamos então colocar a mão na massa e implementar os dois exemplos acima, primeiro a sombra simples:</p>
<div style="-moz-box-shadow:5px 5px 10px #ccc;font-size:1.2em; border:1px solid #ccc; padding:30px 5px; text-align:center;">bittersweet dev &#8211; CSS3: propriedade box-shadow</div>
<p>E agora o exemplo com múltiplas sombras:</p>
<div style="-moz-box-shadow:5px 5px 10px #333, -5px -5px 10px #ccc;;font-size:1.2em; border:1px solid #ccc; padding:30px 5px; text-align:center;">bittersweet dev &#8211; CSS3: propriedade box-shadow</div>
<p>Para aqueles que estão me taxando de louco ou acham que essa é a versão web do conto <a href="http://pt.wikipedia.org/wiki/A_Roupa_Nova_do_Rei" target="_blank">A Roupa Nova do Rei</a>, seguem as respectivas imagens com o que você deveria ter visto aqui:</p>
<div id="attachment_216" class="wp-caption aligncenter" style="width: 526px"><img class="size-full wp-image-216" title="sombra_simples" src="http://blog.hboaventura.com/wp-content/uploads/2009/07/sombra_simples.png" alt="Sombra Simples" width="516" height="102" /><p class="wp-caption-text">Sombra Simples</p></div>
<div id="attachment_217" class="wp-caption aligncenter" style="width: 531px"><img class="size-full wp-image-217" title="sombra_multipla" src="http://blog.hboaventura.com/wp-content/uploads/2009/07/sombra_multipla.png" alt="Sombra Múltipla" width="521" height="108" /><p class="wp-caption-text">Sombra Múltipla</p></div>
<p>E por hoje é só pessoal! Dúvidas, críticas, sugestões?</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 566px; width: 1px; height: 1px;">http://pt.wikipedia.org/wiki/A_Roupa_Nova_do_Rei</div>


<br/><br/><p><strong>  Leia também:</strong><ol><li><a href='http://blog.hboaventura.com/css3-propriedade-text-shadow/' rel='bookmark' title='Permanent Link: CSS3: propriedade text-shadow'>CSS3: propriedade text-shadow</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.hboaventura.com/css3-propriedade-box-shadow/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CSS3: propriedade text-shadow</title>
		<link>http://blog.hboaventura.com/css3-propriedade-text-shadow/</link>
		<comments>http://blog.hboaventura.com/css3-propriedade-text-shadow/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 01:17:59 +0000</pubDate>
		<dc:creator>kidh0</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://blog.hboaventura.com/?p=142</guid>
		<description><![CDATA[
Quem nunca recebeu aquele layout finalizado, com um título sombreado e silenciosamente pensou: &#8220;P*** ****, lá vou eu fazer um text-replacement novamente&#8221;. Essa atitude era comum entre os webdevelopers, mas finalmente o pessoal da W3C veio solucionar nossos problemas.
Definição
O text-shadow pode ser aplicado a qualquer elemento que tenha texto, lógico, e é aceito pela grande [...]

<br/><br/>
<strong>  Leia também:</strong><ol><li><a href='http://blog.hboaventura.com/css3-propriedade-box-shadow/' rel='bookmark' title='Permanent Link: CSS3: propriedade box-shadow'>CSS3: propriedade box-shadow</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-147" title="CSS" src="http://blog.hboaventura.com/wp-content/uploads/2009/07/css-300x184.jpg" alt="CSS" width="216" height="132" /></p>
<p>Quem nunca recebeu aquele layout finalizado, com um título sombreado e silenciosamente pensou: &#8220;P*** ****, lá vou eu fazer um text-replacement novamente&#8221;. Essa atitude era comum entre os webdevelopers, mas finalmente o pessoal da <a href="http://www.w3.org/" target="_blank">W3C</a> veio solucionar nossos problemas.</p>
<h3>Definição</h3>
<p>O text-shadow pode ser aplicado a qualquer elemento que tenha texto, lógico, e é aceito pela grande maioria dos browsers modernos: Firefox 3.5, Opera 9.5+, Safari 3+. Infelizmente, mesmo com todas as melhorias (e realmente foram muitas) no Internet Explorer 7 e mais ainda no Internet Explorer 8, eles ainda não suportam essa propriedade, ou seja, escolheram a pílula azul.</p>
<p>A propriedade text-shadow é usada da seguinte maneira:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">text-shadow</span><span style="color: #00AA00;">:</span> <span style="color: #933;">2px</span> <span style="color: #933;">2px</span> <span style="color: #933;">2px</span> <span style="color: #cc00cc;">#00f</span><span style="color: #00AA00;">;</span></pre></div></div>

<p>Onde:</p>
<ul>
<li> os dois primeiros valores são as coordenadas top left, para onde a sombra será projetada;</li>
<li>o terceiro valor é o blur da sombra;</li>
<li>o quarto valor é a cor da sombra;</li>
</ul>
<p>A propriedade também aceita multiplas sombras. Sim! Até degradê é possível de se implementar usando somente CSS. Para isso, é só separar a declaração das sombras usando vírgulas:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">text-shadow</span><span style="color: #00AA00;">:</span> <span style="color: #933;">2px</span> <span style="color: #933;">2px</span> <span style="color: #933;">2px</span> <span style="color: #cc00cc;">#000</span><span style="color: #00AA00;">,</span> <span style="color: #933;">4px</span> <span style="color: #933;">4px</span> <span style="color: #933;">2px</span> <span style="color: #cc00cc;">#00f</span><span style="color: #00AA00;">;</span></pre></div></div>

<p>Essa propriedade não é nova. Na verdade ela foi proposta na especificação do <a href="http://www.w3.org/TR/REC-CSS2/text.html#text-shadow-props" target="_blank">CSS2</a>. A definição completa da propriedade pode ser encontrada <a href="http://www.w3.org/TR/2003/CR-css3-text-20030514/#text-shadows" target="_blank">aqui.</a></p>
<h3>Exemplos</h3>
<p>Vamos então implementar então os dois exemplos acima, primeiro a sombra simples:</p>
<p><span style="text-shadow: 2px 2px 2px #00f; padding:5px 10px; background-color:#666; color:#fff; font-size:1.2em;">bittersweet dev &#8211; CSS3: Propriedade text-shadow</span></p>
<p>E também o com sombras multiplas:</p>
<p><span style="text-shadow: 2px 2px 2px #000, 4px 4px 2px #00f; padding:5px 10px; background-color:#666; color:#fff; font-size:1.2em;">bittersweet dev &#8211; CSS3: Propriedade text-shadow</span></p>
<p>Pra quem não viu nada diferente nessas frases dê uma olhada nas imagens abaixo que representam respectivamente os exemplos acima:</p>
<p style="text-align: center;"><img class="size-medium wp-image-175  aligncenter" title="CSS3 text-shadow exemplo 1" src="http://blog.hboaventura.com/wp-content/uploads/2009/07/exemplo1-300x25.png" alt="CSS3 text-shadow exemplo 1" width="300" height="25" /></p>
<p style="text-align: center;"><img class="size-medium wp-image-176  aligncenter" title="CSS3 text-shadow exemplo 2" src="http://blog.hboaventura.com/wp-content/uploads/2009/07/exemplo2-300x25.png" alt="CSS3 text-shadow exemplo 2" width="300" height="25" /></p>
<p>&#8230; e uma dica, tome a pílula vermelha, ou seja, use um <a href="http://pt-br.www.mozilla.com/pt-BR/" target="_blank">browser</a> decente!</p>
<p>Aguardem novos posts explicando as novas propriedades do CSS3, até lá, deixe seu comentário, dúvida ou critica</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 173px; width: 1px; height: 1px;">

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">text-shadow</span><span style="color: #00AA00;">:</span> <span style="color: #933;">2px</span> <span style="color: #933;">2px</span> <span style="color: #933;">4px</span> <span style="color: #cc00cc;">#f00</span><span style="color: #00AA00;">;</span></pre></div></div>

</div>


<br/><br/><p><strong>  Leia também:</strong><ol><li><a href='http://blog.hboaventura.com/css3-propriedade-box-shadow/' rel='bookmark' title='Permanent Link: CSS3: propriedade box-shadow'>CSS3: propriedade box-shadow</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.hboaventura.com/css3-propriedade-text-shadow/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[update] Instalando o Firefox 3.5 no Ubuntu 9.04</title>
		<link>http://blog.hboaventura.com/instalando-o-firefox-3-5-no-ubuntu-9-04/</link>
		<comments>http://blog.hboaventura.com/instalando-o-firefox-3-5-no-ubuntu-9-04/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 16:22:47 +0000</pubDate>
		<dc:creator>kidh0</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.hboaventura.com/?p=130</guid>
		<description><![CDATA[Este mês (Julho) a Mozilla lançou (finalmente) a versão final do Firefox 3.5. Como já é costume,  só vai ser a oficial na próxima versão do Ubuntu  (9.10 a.k.a Karmic Koala).
Para aqueles que não querem esperar alguns meses pela nova versão, podemos instalar ela na versão 9.04. O processo é bem simples.
1º passo
Abra um terminal [...]

<br/><br/>
<strong>  Leia também:</strong><ol><li><a href='http://blog.hboaventura.com/php-instalando-a-extensao-svn-no-ubuntu-9-04/' rel='bookmark' title='Permanent Link: PHP: Instalando a extensão SVN no Ubuntu 9.04'>PHP: Instalando a extensão SVN no Ubuntu 9.04</a></li>
<li><a href='http://blog.hboaventura.com/visualizando-sites-no-internet-explorer-no-ubuntu/' rel='bookmark' title='Permanent Link: Visualizando sites no Internet Explorer no Ubuntu'>Visualizando sites no Internet Explorer no Ubuntu</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-131" title="Firefox 3.5" src="http://blog.hboaventura.com/wp-content/uploads/2009/07/logo_firefox-3.5.jpg" alt="Firefox 3.5" width="130" height="135" />Este mês (Julho) a Mozilla lançou (finalmente) a versão final do Firefox 3.5. Como já é costume,  só vai ser a oficial na próxima versão do Ubuntu  (9.10 a.k.a Karmic Koala).</p>
<p>Para aqueles que não querem esperar alguns meses pela nova versão, podemos instalar ela na versão 9.04. O processo é bem simples.</p>
<h3>1º passo</h3>
<p>Abra um terminal e digite o seguinte comando:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> update <span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000; font-weight: bold;">&amp;</span>amp; \
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> firefox-<span style="color: #000000;">3.5</span> firefox-<span style="color: #000000;">3.5</span>-gnome-support</pre></div></div>

<p>Feito isso, você já está com Firefox 3.5 instalado na máquina, mas para poder usar, você precisa mudar todos os atalhos que existem para o Firefox, e isso é chato!</p>
<h3>2ª passo</h3>
<p>Vamos então alterar o link simbólico para o Firefox, que por padrão, aponta para a versão 3.0<br />
No terminal digite os seguintes comandos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin
<span style="color: #666666; font-style: italic;">#só vai remover o link simbólico, não o firefox</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-rf</span> firefox
<span style="color: #666666; font-style: italic;">#cria novamente o link simbólico, apontando para o firefox 3.5</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">ln</span> <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>firefox-<span style="color: #000000;">3.5</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>firefox</pre></div></div>

<p>Pronto, agora o sistema já vai usar a versão 3.5 como padrão</p>
<h3>Passo extra</h3>
<p>Para aqueles que não querem usar o Firefox em inglês (sim, a instalação padrão é em inglês), é só instalar o pacote de idioma pt-BR, clicando <a href="http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.5/linux-i686/xpi/pt-BR.xpi" target="_blank">aqui</a>.</p>
<p>Uma curiosidade: o nome da versão 3.5 é Shiretoko, o nome de uma península do Japão, mais informações <a href="http://pt.wikipedia.org/wiki/Shiretoko" target="_blank">aqui</a></p>
<h3>Update</h3>
<p>Após algum tempo usando essa solução, percebi que alguns programas instalados não utilizam o link simbólico /usr/bin/firefox, e sim o link simbólico /usr/bin/x-www-browser</p>
<p>Para alterar esse link, como super usuário, digite no terminal:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> update-alternatives <span style="color: #660033;">--config</span> x-www-browser</pre></div></div>

<p>No meu caso, apareceu a seguinte listagem:</p>
<pre>Existem 3 alternativas que fornecem 'x-www-browser'.

Seleção      Alternativa
-----------------------------------------------
+        1    /usr/bin/firefox-3.0
*        2    /usr/bin/firefox-3.5
         3    /usr/bin/google-chrome

Pressione enter para manter o padrão[*] ou digite o número da seleção:</pre>
<p>Neste caso, digite 2 para usar o firefox 3.5 como o padrão.</p>
<p>Informação retirada do <a href="http://www.dicas-l.com.br/dicas-l/20070105.php" target="_blank">Dicas-L</a></p>


<br/><br/><p><strong>  Leia também:</strong><ol><li><a href='http://blog.hboaventura.com/php-instalando-a-extensao-svn-no-ubuntu-9-04/' rel='bookmark' title='Permanent Link: PHP: Instalando a extensão SVN no Ubuntu 9.04'>PHP: Instalando a extensão SVN no Ubuntu 9.04</a></li>
<li><a href='http://blog.hboaventura.com/visualizando-sites-no-internet-explorer-no-ubuntu/' rel='bookmark' title='Permanent Link: Visualizando sites no Internet Explorer no Ubuntu'>Visualizando sites no Internet Explorer no Ubuntu</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.hboaventura.com/instalando-o-firefox-3-5-no-ubuntu-9-04/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Usando o SWFObject para adicionar Flash ao seu projeto</title>
		<link>http://blog.hboaventura.com/usando-o-swfobject-para-adicionar-flash-ao-seu-projeto/</link>
		<comments>http://blog.hboaventura.com/usando-o-swfobject-para-adicionar-flash-ao-seu-projeto/#comments</comments>
		<pubDate>Wed, 27 May 2009 11:14:37 +0000</pubDate>
		<dc:creator>kidh0</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.hboaventura.com/?p=107</guid>
		<description><![CDATA[
Todo o desenvolvedor web que se preste deve gerar um HTML/XHTML válido para suas páginas. Isso não é mais uma recomendação, é um dever nosso.
Quando falamos de inserir um Flash, o negócio fica preto, o código gerado pelos famigerados programas da Adobe não são válidos, criando tags que não existem (&#60;embed&#62;?) e um fonte gigantes [...]

<br/><br/>
<strong>Sem Posts Relacionados.</strong>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-118" title="swfobject_logo" src="http://blog.hboaventura.com/wp-content/uploads/2009/05/swfobject_logo-300x76.gif" alt="swfobject_logo" width="240" height="61" /></p>
<p>Todo o desenvolvedor web que se preste deve gerar um HTML/XHTML válido para suas páginas. Isso não é mais uma recomendação, é um dever nosso.</p>
<p>Quando falamos de inserir um Flash, o negócio fica preto, o código gerado pelos <span style="text-decoration: line-through;">famigerados</span> programas da Adobe não são válidos, criando tags que não existem (&lt;embed&gt;?) e um fonte gigantes com parâmetros que não é bom nem refletirmos muito sobre eles.</p>
<p>Outro problema que temos é de usabilidade, visto que esse Flash não tem um conteúdo alternativo, excluindo as pessoas que não tem Flash player. Claro, isso hoje em dia é raro de existir, mas não podemos esquecer que cresce cada vez mais (a passos de tartaruga, mas ainda assim caminha) o acesso a internet usando dispositivos móveis e alguns browsers usados nesses dispositivos não têm suporte. Dessa maneira, o  usuário simplesmente vai ter uma tela em branco, sem saber o que deveria ter de conteúdo ali. Também não podemos esquecer dos leitores de tela (JAWS e afins). Eles não &#8220;entendem&#8221; flash, excluindo, assim,  mais uma parcela de usuários.</p>
<p>Devemos lembrar ainda de um problema existente (pra falar a verdade, eu não sei se ainda existe, pois faz anos que não utilizo o IE) com o Internet Explorer que,  após determinada versão do Flash Player (8 se não estou enganado), tornou-se necessário clicar no flash para ativá-lo, ou seja, você precisava clicar num menu para ele funcionar como um menu.</p>
<p>Mas isso agora é passado! (parece aquelas propagandas de produtos duvidosos que aparecem na TV em horários alternativos) Existe uma maneira de inserir Flash gerando um HTML/XHTML válido, acessível e sem dores de cabeça e se chama SWFObject</p>
<h3>O que é o SWFObject?</h3>
<p>É um pequeno JavaScript  (menos de 4kb após ser comprimido) para adicionar conteúdos feitos em Flash na sua página de maneira fácil e indolor.</p>
<h3>Porque usar o SWFObject?</h3>
<p>Dentre as razões, podemos citar:<br />
* Sua página terá um HTML válido<br />
* Detecta automaticamente o Flash Player (existem outras soluções para isso, mas todas tem seus problemas)<br />
* Remove o incômodo de ter que clicar para ativar o Flash no Internet Explorer<br />
* Como é possível ter um conteúdo alternativo para o Flash, melhora a indexação pelos mecanismos de busca<br />
* Permite que se tenha uma<a href="http://www.tableless.com.br/graceful-degradation-e-tudo-sobre-acessibilidade" target="_blank"> Graceful Degradation</a></p>
<h3>Como usar</h3>
<p>Antes de tudo, devemos fazer o download do SWFObject do página do projeto no <a href="http://code.google.com/p/swfobject/downloads/list" target="_blank">Google Code</a>.<br />
A última versão estável disponível quando escrevi o artigo é a 2.1. Já existe a 2.2, mas é uma versão beta, deixem ela para depois, ok?</p>
<p>Descompacte o arquivo swfobject_2_1.zip e copie o swfobject.js e o expressInstall.swf para o diretório do seu projeto.</p>
<p>Usando o SWFObject, existem duas maneiras de adicionar o conteúdo flash na sua página.</p>
<h4>Maneira Estática</h4>
<p>Adiciona o Flash e o conteúdo alternativo usando marcação válida e usa o JavaScript para resolver que a marcação não pode resolver sozinha.  vantagem<br />
<strong>Tem como vantagem: </strong></p>
<ul>
<li>Usa marcação standard</li>
<li>Não usa javascript para adicionar o conteúdo a página, apenas para corrigir problemas pontuais, ou seja, o Flash vai ser acessível a um número maior de usuários (os que não tem suporte a JavaScript, leitores RSS, etc)</li>
</ul>
<p><strong>1º Passo </strong><br />
Seu Flash deve ser adicionado da seguinte maneira no &lt;body&gt; da sua página:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">object</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;meuId&quot;</span> <span style="color: #000066;">classid</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot;</span> <span style="color: #000066;">width</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;300&quot;</span> <span style="color: #000066;">height</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;120&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">param</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;movie&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;test.swf&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
    <span style="color: #808080; font-style: italic;">&lt;!--[if !IE]&gt;--&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">object</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;application/x-shockwave-flash&quot;</span> <span style="color: #000066;">data</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;test.swf&quot;</span> <span style="color: #000066;">width</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;300&quot;</span> <span style="color: #000066;">height</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;120&quot;</span>&gt;</span>
    <span style="color: #808080; font-style: italic;">&lt;!--&lt;![endif]--&gt;</span>
       <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
            <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>Conteudo Alternativo<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>
           <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.adobe.com/go/getflashplayer&quot;</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">img</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif&quot;</span> <span style="color: #000066;">alt</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Faça o download do Flash Player&quot;</span> <span style="color: #66cc66;">/</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
    <span style="color: #808080; font-style: italic;">&lt;!--[if !IE]&gt;--&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">object</span>&gt;</span>
    <span style="color: #808080; font-style: italic;">&lt;!--&lt;![endif]--&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">object</span>&gt;</span></pre></div></div>

<p>Você pode adicionar parâmetros adicionais, mas é necessário colocar o &lt;param&gt; em ambas as declarações do &lt;object&gt; para o correto funcionamento</p>
<p><strong>2º Passo </strong><br />
Adicione a chamada para o SWFObject no &lt;head&gt;:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;swfobject.js&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span></pre></div></div>

<p><strong>3º Passo </strong><br />
Registre seu Flash no SWFObject e mostrar o que ele deve fazer com ele:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;</span>
     swfobject.registerObject(&quot;meuFlash&quot;, &quot;9.0.0&quot;, &quot;expressInstall.swf&quot;);
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span></pre></div></div>

<p>Onde o primeiro argumento é o ID do seu Flash, o segundo é a versão mínima do Flash Player que o Flash necessita e o terceiro parâmetro (opcional) é o link para a instalação expressa do Flash Player (vem junto no pacote do SWFObject)</p>
<p><a href="http://blog.hboaventura.com/wp-content/uploads/2009/05/swfobject_static.html" target="_blank">Veja um exemplo</a></p>
<h4>Maneira Dinâmica</h4>
<p>É baseada no conteúdo alternativo e usa o JavaScript para substituir este conteúdo pelo o do Flash caso haja o Flash Player e suporte JavaScript minimo necessário.<br />
<strong>Tem como vantagem: </strong></p>
<ul>
<li>Evita ter que clicar no Flah para ativá-lo no Internet Explorer 6/7 e Opera 9</li>
<li>Se integra melhor com aplicações que usam script</li>
</ul>
<p><strong>1º Passo </strong><br />
Crie um conteúdo alternativo usando uma marcação válida no &lt;body&gt; da sua página:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;meuConteudo&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>Conteudo alternativo<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.adobe.com/go/getflashplayer&quot;</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">img</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif&quot;</span> <span style="color: #000066;">alt</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Faça o download do Flash player&quot;</span> <span style="color: #66cc66;">/</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></pre></div></div>

<p>É necessário adicionar um ID ao elemento, pois é através dele que o SWFObject irá fazer a substituição do conteúdo.</p>
<p><strong>2º Passo </strong><br />
Adicione a chamada para o SWFObject no &lt;head&gt;:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;swfobject.js&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span></pre></div></div>

<p><strong>3º Passo </strong><br />
Adicione o SWF usando JavaScript:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;</span>
    swfobject.embedSWF(&quot;test.swf&quot;, &quot;meuConteudo&quot;, &quot;300&quot;, &quot;120&quot;, &quot;9.0.0&quot;, &quot;expressInstall.swf&quot;);
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span></pre></div></div>

<p>O método embedSWF tem 5 parâmetros obrigatórios (urlSWF,id,width,height,versionSWF) e 4 opcionais (urlInstallSWF,flashvars,params,attributes). Para este exemplo, vou usar só os obrigatórios, mais detalhes sobre os parâmetros acesse <a href="http://code.google.com/p/swfobject/wiki/documentation" target="_blank">http://code.google.com/p/swfobject/wiki/documentation</a></p>
<p>Isso faz com que o SWFObject substitua o conteúdo do elemento ID, com o conteúdo do urlSWF</p>
<p><a href="http://blog.hboaventura.com/wp-content/uploads/2009/05/swfobject_dynamic.html" target="_blank">Veja um exemplo</a></p>
<p>Alguns links interessantes sobre o assunto:</p>
<ul>
<li><a href="http://code.google.com/p/swfobject/downloads/list" target="_blank">Página do projeto SWFObject</a></li>
<li><a href="http://www.alistapart.com/articles/flashembedcagematch/" target="_blank">A List Apart &#8211; Flash Embedding Cage Match</a></li>
</ul>
<p>E era isso, dúvidas? Críticas? Sugestões? Entre em contato!</p>


<br/><br/><p><strong>Sem Posts Relacionados.</strong></p>]]></content:encoded>
			<wfw:commentRss>http://blog.hboaventura.com/usando-o-swfobject-para-adicionar-flash-ao-seu-projeto/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Resolvendo o problema no boot do Ubuntu 9.04 no notebook HP DV6253</title>
		<link>http://blog.hboaventura.com/resolvendo-o-problema-no-boot-do-ubuntu-904-no-notebook-hp-dv6253/</link>
		<comments>http://blog.hboaventura.com/resolvendo-o-problema-no-boot-do-ubuntu-904-no-notebook-hp-dv6253/#comments</comments>
		<pubDate>Mon, 11 May 2009 01:32:35 +0000</pubDate>
		<dc:creator>kidh0</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[HP]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.hboaventura.com/?p=102</guid>
		<description><![CDATA[Após a instalação da nova versão do Ubuntu, a 9.04 a.k.a Jaunty Jagalope, notei que um antigo fantasma voltou a assombrar meu notebook, um HP modelo DV6253.
Entre as versões 7.04 e a 8.04, tive um problema no boot do computador que simplesmente travava o processo. Por mais que pareça bizarro, eu tinha que ficar segurando [...]

<br/><br/>
<strong>  Leia também:</strong><ol><li><a href='http://blog.hboaventura.com/instalando-o-firefox-3-5-no-ubuntu-9-04/' rel='bookmark' title='Permanent Link: [update] Instalando o Firefox 3.5 no Ubuntu 9.04'>[update] Instalando o Firefox 3.5 no Ubuntu 9.04</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Após a instalação da nova versão do Ubuntu, a 9.04 a.k.a Jaunty Jagalope, notei que um antigo fantasma voltou a assombrar meu notebook, um HP modelo DV6253.</p>
<p>Entre as versões 7.04 e a 8.04, tive um problema no boot do computador que simplesmente travava o processo. Por mais que pareça bizarro, eu tinha que ficar segurando qualquer tecla para a máquina bootar corretamente.</p>
<p>Após vários updates da versão 8.04, o problema sumiu e continuo assim até a versão 9.04.</p>
<p>Quando o notebook está ligado na tomada, funciona perfeitamente, bootando tão rápido quando possivel na máquina. Agora o problema é quando se usa o notebook na bateria. Os fantasmas voltaram para assombrar a máquina.</p>
<p>Após 5 minutos de pesquisa, a solução foi encontrada. Faça o seguinte:</p>
<p>Procure no arquivo /boot/grub/menu.lst pela seguinte linha:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">kernel          <span style="color: #000000; font-weight: bold;">/</span>boot<span style="color: #000000; font-weight: bold;">/</span>vmlinuz-2.6.28-<span style="color: #000000;">12</span>-generic <span style="color: #007800;">root</span>=<span style="color: #007800;">UUID</span>=323825d6-c0a8-435a-912e-92c0f1359f8e ro <span style="color: #007800;">locale</span>=pt_BR quiet splash</pre></div></div>

<p>Provavelmente deve ter alguma diferença no seu arquivo, mas procure o último kernel instalado.</p>
<p>Adicione no fim da linha o comando <strong>acpi=noirq</strong>, deixando a linha assim:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">kernel          <span style="color: #000000; font-weight: bold;">/</span>boot<span style="color: #000000; font-weight: bold;">/</span>vmlinuz-2.6.28-<span style="color: #000000;">12</span>-generic <span style="color: #007800;">root</span>=<span style="color: #007800;">UUID</span>=323825d6-c0a8-435a-912e-92c0f1359f8e ro <span style="color: #007800;">locale</span>=pt_BR quiet splash <span style="color: #007800;">acpi</span>=noirq</pre></div></div>

<p>Feito isso, sua máquina já vai bootar normalmente.</p>
<p>Solução retirada do site: <a href="http://ubuntuforums.org/showthread.php?t=1137421" target="_blank">http://ubuntuforums.org/showthread.php?t=1137421</a></p>


<br/><br/><p><strong>  Leia também:</strong><ol><li><a href='http://blog.hboaventura.com/instalando-o-firefox-3-5-no-ubuntu-9-04/' rel='bookmark' title='Permanent Link: [update] Instalando o Firefox 3.5 no Ubuntu 9.04'>[update] Instalando o Firefox 3.5 no Ubuntu 9.04</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.hboaventura.com/resolvendo-o-problema-no-boot-do-ubuntu-904-no-notebook-hp-dv6253/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Visualizando sites no Internet Explorer no Ubuntu</title>
		<link>http://blog.hboaventura.com/visualizando-sites-no-internet-explorer-no-ubuntu/</link>
		<comments>http://blog.hboaventura.com/visualizando-sites-no-internet-explorer-no-ubuntu/#comments</comments>
		<pubDate>Fri, 08 May 2009 02:57:29 +0000</pubDate>
		<dc:creator>kidh0</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[WebDev]]></category>

		<guid isPermaLink="false">http://blog.hboaventura.com/?p=94</guid>
		<description><![CDATA[Já faz um bom tempo que eu parei de usar o SO desenvolvido pelo pessoal de Redmond. Mesmo assim, ainda passo pela dor de cabeça de ter que validar os sites no bendito Internet Explorer.
Para um usuário Windows, isso deve ser bem fácil (veja bem, deve, pois eu presenciei a tentativa de instalação do IE7 [...]

<br/><br/>
<strong>  Leia também:</strong><ol><li><a href='http://blog.hboaventura.com/instalando-o-firefox-3-5-no-ubuntu-9-04/' rel='bookmark' title='Permanent Link: [update] Instalando o Firefox 3.5 no Ubuntu 9.04'>[update] Instalando o Firefox 3.5 no Ubuntu 9.04</a></li>
<li><a href='http://blog.hboaventura.com/resolvendo-o-problema-no-boot-do-ubuntu-904-no-notebook-hp-dv6253/' rel='bookmark' title='Permanent Link: Resolvendo o problema no boot do Ubuntu 9.04 no notebook HP DV6253'>Resolvendo o problema no boot do Ubuntu 9.04 no notebook HP DV6253</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-97" title="ies4linux" src="http://blog.hboaventura.com/wp-content/uploads/2009/05/ies4linux.jpg" alt="ies4linux" width="200" height="158" />Já faz um bom tempo que eu parei de usar o SO desenvolvido pelo pessoal de Redmond. Mesmo assim, ainda passo pela dor de cabeça de ter que validar os sites no <span style="text-decoration: line-through;">bendito</span> Internet Explorer.</p>
<p>Para um usuário Windows, isso deve ser bem fácil (veja bem, deve, pois eu presenciei a tentativa de instalação do IE7 numa máquina windows e não teve santo que fizesse ela funcionar), mas para os desenvolvedores que trabalham em ambiente Linux, a estória não é bem assim.</p>
<p>Existem algumas soluções para fazer isso a partir do Linux, e eu vou compartilhar com vocês aqui as que eu já utilizei e/ou continuo utilizando.</p>
<h3>IE4Linux</h3>
<p>O <a href="http://www.tatanka.com.br" target="_blank">IE4Linux</a> é uma ótima ferramenta desenvolvida para Linux que usa o <a href="http://www.winehq.org/" target="_blank">Wine</a> para instalar as versões 5, 5.5, 6 e uma versão beta da engine do IE7</p>
<p>Para instalar essa ferramenta é bem simples.</p>
<p><strong>Primeiro passo</strong><br />
Deve-se ter instalado os pacotes Wine e Cabextract, para isso, suponto que você usa o Ubuntu (no meu caso, a versão 9.04), digite o seguinte comando no terminal:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> wine cabextract</pre></div></div>

<p>Feito isso, já tem os pacotes necessários para a instalação do IE4Linux, agora vamos executar os seguintes comandos no terminal:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.tatanka.com.br<span style="color: #000000; font-weight: bold;">/</span>ies4linux<span style="color: #000000; font-weight: bold;">/</span>downloads<span style="color: #000000; font-weight: bold;">/</span>ies4linux-latest.tar.gz
<span style="color: #c20cb9; font-weight: bold;">tar</span> zxvf ies4linux-latest.tar.gz
<span style="color: #7a0874; font-weight: bold;">cd</span> ies4linux-<span style="color: #000000; font-weight: bold;">*</span>
.<span style="color: #000000; font-weight: bold;">/</span>ies4linux</pre></div></div>

<p>Agora é o famoso next, next, finish!</p>
<p>Ele deve criar os ícones para acessar o IE, dai é só acessar o site e testar.</p>
<p>Eu ainda uso esta solução, mas tem um porém muito incomodo. Por alguma razão, a aplicação causa um memory leak que acaba por travar a máquina. Bom, wine ou não, ainda é uma aplicação Windows, não dava para esperar alguma coisa diferente.</p>
<h3>Máquina Virtual</h3>
<p>Essa é outra solução, embora um pouco mais complexa, pois envolve a instalação de uma máquina virtual (no meu caso, quando testei, usei o <a href="http://www.virtualbox.org/" target="_blank">VirtualBox</a>) e depois a instalação do Windows.</p>
<p>Como essa solução merece um outro post para explica-la, deixo um link que ensina o passo a passo: <a href="http://www.tecnoclasta.com/2008/07/03/virtualbox-windowsxp-e-ubuntu-juntos-guia-de-instalacao/">http://www.tecnoclasta.com/2008/07/03/virtualbox-windowsxp-e-ubuntu-juntos-guia-de-instalacao/</a></p>
<h3>Renderização online</h3>
<p>Essa é a solução que venho usando com mais frequencia. Com o advento do IE8, já começo a me preocupar em como ele ira renderizar os projetos.</p>
<p>Para isso, utilizo dois sites:</p>
<ul>
<li><a href="http://ipinfo.info/netrenderer/" target="_blank">IE NetRender</a></li>
<li><a href="http://browsershots.org/" target="_blank">Browser Shots</a></li>
</ul>
<p>O primeiro renderiza única e exclusivamente IE, nas versões 5.5, 6, 7 e 8, mas é extremamente rápido para mostrar o screenshot. Já o segundo tem toda uma gama de browsers e de sistemas operacionais também (FF no Windows, no Linux, no Mac, por exemplo), mas tem um problema incomodo, uma fila gigantesca de espera, que por muitas vezes acaba expirando.</p>
<h3>Para finalizar</h3>
<p>Depois de apresentar essas opções, acredito que deva testa-las e ver com qual você se adapta melhor. Cada uma tem seus pŕos e contras, vai de cada um a melhor.</p>
<p>Eu continuo usando a Renderização Online, pois tento desenvolver os sites de uma maneira a evitar os problemas de renderização. Como nem sempre posso contorná-los, uso esse recurso para ver se está tudo Ok no site.</p>
<p>Por hoje é só pessoal, qualquer dúvida ou crítica, é só deixar um comentário</p>


<br/><br/><p><strong>  Leia também:</strong><ol><li><a href='http://blog.hboaventura.com/instalando-o-firefox-3-5-no-ubuntu-9-04/' rel='bookmark' title='Permanent Link: [update] Instalando o Firefox 3.5 no Ubuntu 9.04'>[update] Instalando o Firefox 3.5 no Ubuntu 9.04</a></li>
<li><a href='http://blog.hboaventura.com/resolvendo-o-problema-no-boot-do-ubuntu-904-no-notebook-hp-dv6253/' rel='bookmark' title='Permanent Link: Resolvendo o problema no boot do Ubuntu 9.04 no notebook HP DV6253'>Resolvendo o problema no boot do Ubuntu 9.04 no notebook HP DV6253</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.hboaventura.com/visualizando-sites-no-internet-explorer-no-ubuntu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CSS Hacks ou CSS Condicional? A partir de agora, nenhum!</title>
		<link>http://blog.hboaventura.com/css-hacks-ou-css-condicional-apartir-de-agora-nenhum/</link>
		<comments>http://blog.hboaventura.com/css-hacks-ou-css-condicional-apartir-de-agora-nenhum/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 03:03:15 +0000</pubDate>
		<dc:creator>kidh0</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://blog.hboaventura.com/?p=77</guid>
		<description><![CDATA[Como todo o desenvolvedor Web, sofro diariamente com as dores de cabeça causadas pelos browsers que não seguem os padrões (ok, Internet Explorer). É um tal de margem duplicada pra cá, texto misteriosos que se replicam em final de blocos, uma maravilha!
Para contornar esses problemas que nosso &#8220;querido&#8221; Internet Explorer nos causa, temos algumas práticas [...]

<br/><br/>
<strong>Sem Posts Relacionados.</strong>]]></description>
			<content:encoded><![CDATA[<p>Como todo o desenvolvedor Web, sofro diariamente com as dores de cabeça causadas pelos browsers que não seguem os padrões (ok, Internet Explorer). É um tal de margem duplicada pra cá, texto misteriosos que se replicam em final de blocos, uma maravilha!</p>
<p>Para contornar esses problemas que nosso &#8220;querido&#8221; Internet Explorer nos causa, temos algumas práticas interessantes, dentre elas, as que eu <span style="text-decoration: line-through;">utilizo</span> utilizava posso destacar os CSS Hacks e os CSS Condicionais</p>
<h3>CSS Hacks</h3>
<p>Podemos definir como CSS Hacks as formas que encontramos de &#8220;enganar&#8221; o browser (IE, sempre IE) para que ele  renderize corretamente corretamente o CSS da página. Esses Hacks somente se aplicam aos browsers que tem essa falha, lógico.</p>
<p>Podemos citar alguns Hacks famosos:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/* IE 6 e anteriores */</span>
<span style="color: #00AA00;">*</span> html <span style="color: #cc00cc;">#um</span>  <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">red</span> <span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* IE 7 e anteriores */</span>
<span style="color: #00AA00;">*</span><span style="color: #3333ff;">:first-child</span><span style="color: #00AA00;">+</span>html <span style="color: #cc00cc;">#dois</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">red</span> <span style="color: #00AA00;">&#125;</span> 
&nbsp;
<span style="color: #808080; font-style: italic;">/* IE 7 e browsers modernos */</span>
html <span style="color: #00AA00;">&gt;</span> body <span style="color: #cc00cc;">#tres</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">red</span> <span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Somente browsers modernos (sem IE 7) */</span>
html <span style="color: #00AA00;">&gt;</span> <span style="color: #808080; font-style: italic;">/**/</span>body <span style="color: #cc00cc;">#quatro</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">red</span> <span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Apesar de parecer ser uma solução simples, os Hacks tornam o CSS não-válidos, o que na minha opinião é um problema. Sem contar o fato de que estamos enganando o browser para ele renderizar algo que ele não foi feito para suporta, ou seja, processamento extra.</p>
<h3>CSS Condicional</h3>
<p>Como o próprio nome já diz, é o uso de uma folha de estilos condicional, ou seja, só é carregada quando for determinado browser que estiver fazendo a requisição, e o melhor, sem javascript!</p>
<p>Essa prática faz uso dos <a title="About Conditional Comments" href="http://msdn.microsoft.com/en-us/library/ms537512(VS.85).aspx" target="_blank">conditional comments</a>, um comentário HTML com uma sintaxe especial que é interpretado única e exclusivamente pelo Internet Explorer. Os browsers modernos os enxergam apenas como comentários comuns, sem interpretá-los.</p>
<p>Por exemplo, se quisermos que um estilo seja carregado somente no IE 6, fazemos o seguinte:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">&lt;!--[if IE 6]&gt;</span>
<span style="color: #808080; font-style: italic;">	&lt;link rel=&quot;stylesheet&quot; href=&quot;main_ie.css&quot; mce_href=&quot;main_ie.css&quot; type=&quot;text/css&quot; media=&quot;all&quot; /&gt;</span>
<span style="color: #808080; font-style: italic;">&lt;![endif]--&gt;</span></pre></div></div>

<p>A lado bom de se utilizar os CSS Condicionais é que a folha de estilo é válida, pois não usa nenhum hack que possa a ver a invalidá-la. Por outro lado, temos requisições extras que vão ser feitas de acordo com o browser.  Além disso, com está no &lt;head&gt;, a renderização da página fica aguardando ela estar totalmente carregada.</p>
<h3>Uma nova esperança!</h3>
<p>Eis que lendo um artigo do <a href="http://paulirish.com/" target="_blank">Paul Irish</a>, surgiu uma luz no horizonte, que resolve o problema das multiplas requisições de folhas de estilos e também da espera pelo carregamento.</p>
<p>A solução é fazer o uso de conditional comments não para alternar entre folhas de estilos a ser carregadas, e sim para aplicar ou não uma class no &lt;body&gt; do documento da seguinte maneira:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">  <span style="color: #808080; font-style: italic;">&lt;!--[if lt IE 7]&gt; &lt;body class=&quot;ie6&quot;&gt; &lt;![endif]--&gt;</span>
  <span style="color: #808080; font-style: italic;">&lt;!--[if IE 7]&gt;    &lt;body class=&quot;ie7&quot;&gt; &lt;![endif]--&gt;</span>
  <span style="color: #808080; font-style: italic;">&lt;!--[if IE 8]&gt;    &lt;body class=&quot;ie8&quot;&gt; &lt;![endif]--&gt;</span>
  <span style="color: #808080; font-style: italic;">&lt;!--[if !IE]&gt;--&gt;</span>                 <span style="color: #808080; font-style: italic;">&lt;!--&lt;![endif]--&gt;</span></pre></div></div>

<p>Isso  faz com que de acordo com o browser, seja adicionado a class (ie6, ie7 ou ie8) no corpo do documento, possibilitando corrigir as falhas de renderização direto na folha de estilo principal, facilitando até a manutenção do código.</p>
<p>Como exemplo, para adicionar alguma correção, fariamos o seguinte no CSS:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">    div<span style="color: #cc00cc;">#container</span><span style="color: #00AA00;">&#123;</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: #00AA00;">&#125;</span>
    //corrigindo o famoso bug da margem dupla
    body<span style="color: #6666ff;">.ie6</span> div<span style="color: #cc00cc;">#container</span><span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">margin-left</span><span style="color: #00AA00;">:</span><span style="color: #933;">5px</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>E é isso!</p>
<p>De agora em diante, essa é a solução que utilizarei!</p>
<p>Segue alguns links interessantes sobre o assunto:</p>
<ul>
<li><a title="CSS Validator" href="http://jigsaw.w3.org/css-validator/" target="_blank">http://jigsaw.w3.org/css-validator/</a></li>
<li><a href="http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/" target="_blank">http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/</a></li>
<li><a href="http://paulirish.com/2009/browser-specific-css-hacks/" target="_blank">http://paulirish.com/2009/browser-specific-css-hacks/</a></li>
<li><a href="http://www.quirksmode.org/css/condcom.html" target="_blank">http://www.quirksmode.org/css/condcom.html</a></li>
</ul>
<p><span id="more-77"></span><!--more--><!--more--></p>


<br/><br/><p><strong>Sem Posts Relacionados.</strong></p>]]></content:encoded>
			<wfw:commentRss>http://blog.hboaventura.com/css-hacks-ou-css-condicional-apartir-de-agora-nenhum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Script snipMate para VIM</title>
		<link>http://blog.hboaventura.com/script-snipmate-para-vim/</link>
		<comments>http://blog.hboaventura.com/script-snipmate-para-vim/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 20:22:11 +0000</pubDate>
		<dc:creator>kidh0</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[VIM]]></category>

		<guid isPermaLink="false">http://blog.hboaventura.com/?p=71</guid>
		<description><![CDATA[Como sou usuário Linux, é fato que meu editor favorito neste ambiente é o VIM (se bem que tenho usado muito o NetBeans 6.5 para PHP, que é um ótimo editor, mas as vezes é muita coisa para uma simples edição, fica para outro post).
O Script
Recentemente por indicação de um amigo, conheci o script snipMate, [...]

<br/><br/>
<strong>Sem Posts Relacionados.</strong>]]></description>
			<content:encoded><![CDATA[<p>Como sou usuário Linux, é fato que meu editor favorito neste ambiente é o <a href="http://www.vim.org/">VIM</a> (se bem que tenho usado muito o <a href="http://www.netbeans.org/">NetBeans</a> 6.5 para PHP, que é um ótimo editor, mas as vezes é muita coisa para uma simples edição, fica para outro post).</p>
<h3>O Script</h3>
<p>Recentemente por indicação de um amigo, conheci o script <a href="http://www.vim.org/scripts/script.php?script_id=2540">snipMate</a>, criado por <a href="http://www.vim.org/account/profile.php?user_id=16544">Michael Sanders</a>, que basicamente é um script não-obstrusivo para VIM que implementa os snippets do TextMate para o VIM.</p>
<p>A propósito, snippets são aqueles pedaços de código predefinidos (if, while, switch) que você pode inserir no seu documento.</p>
<p>Como exemplo, em um arquivo PHP, usando a instalação padrão do plugin, se você digitar &#8220;for&#8221; e logo após apertar &#8220;&lt;tab&gt;&#8221; no modo de inserção, ele irá expandir para a sintaxe padrão do &#8220;for&#8221; em PHP:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><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: #990000;">count</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: #666666; font-style: italic;">// code...</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Para facilitar, dê uma olhada no screencast do plugin que fala por si só: <a href="http://vimeo.com/3535418">http://vimeo.com/3535418</a></p>
<h3>Instalação</h3>
<p><strong>1º passo:</strong> Faça o download do script <a href="http://www.vim.org/scripts/download_script.php?src_id=10393 ">aqui</a> (essa é a versão 0.79, é bom dar uma olhada no site se não teve nenhum update).<br />
<strong>2º passo: </strong>Dentro do diretório onde está o arquivo, execute o comando (se não existir o diretório .vim, é só criar ele, usando o comando &#8220;mkdir ~/.vim&#8221;):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mv</span> snipMate.zip ~<span style="color: #000000; font-weight: bold;">/</span>.vim</pre></div></div>

<p>Depois entre no diretório e descompacte o arquivo, removendo-o após extraí-lo</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>.vim
<span style="color: #c20cb9; font-weight: bold;">unzip</span> snipMate.zip
<span style="color: #c20cb9; font-weight: bold;">rm</span> snipMate.zip</pre></div></div>

<p><strong>3º passo:</strong> Reinicie o VIM e está feita a instalação, agora é só testar o script!</p>
<p>Dica: Para aqueles que como eu tem o auto-completar na tecla &lt;tab&gt;, ela vai gerar um conflito na edição. Para corrigir isso é só alterar o arquivo .vimrc e mudar onde tiver &#8220;&lt;tab&gt;&#8221; por &#8220;&lt;C-@&gt;&#8221; (sem as aspas).<br />
Pronto, agora o auto-completar vai ser ativado usando &#8220;&lt;ctrl&gt;+&lt;space&gt;&#8221;.</p>


<br/><br/><p><strong>Sem Posts Relacionados.</strong></p>]]></content:encoded>
			<wfw:commentRss>http://blog.hboaventura.com/script-snipmate-para-vim/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
