<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.1" -->
<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/"
	>

<channel>
	<title>Alisson Sales</title>
	<link>http://alisson.zusee.com/blog</link>
	<description>Alguém que tenta fazer as coisas do jeito certo</description>
	<pubDate>Mon, 29 Sep 2008 17:07:29 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.1</generator>
	<language>en</language>
			<item>
		<title>Currency format - Formatar moeda</title>
		<link>http://alisson.zusee.com/blog/2008/08/22/currency-format-formatar-moeda/</link>
		<comments>http://alisson.zusee.com/blog/2008/08/22/currency-format-formatar-moeda/#comments</comments>
		<pubDate>Sat, 23 Aug 2008 03:27:29 +0000</pubDate>
		<dc:creator>Alisson</dc:creator>
		
		<category><![CDATA[expressão regular]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[utils]]></category>

		<category><![CDATA[expressões regulares]]></category>

		<guid isPermaLink="false">http://alisson.zusee.com/blog/2008/08/22/currency-format-formatar-moeda/</guid>
		<description><![CDATA[
Um amigo estava precisando de uma função para formatar campos de valores em R$ (reais) em formulários, ele achou umas por aí e pegou a que achou &#8220;melhorzinha&#8221;, modificou e ficou usando. Eu vi a função e falei: &#8220;Cara isso daí é uma droga! cheio de loops, ifs e elses, gambi mesmo&#8221;


Aí mostrei pra ele [...]]]></description>
			<content:encoded><![CDATA[<p>
Um amigo estava precisando de uma função para formatar campos de valores em R$ (reais) em formulários, ele achou umas por aí e pegou a que achou &#8220;melhorzinha&#8221;, modificou e ficou usando. Eu vi a função e falei: &#8220;Cara isso daí é uma droga! cheio de loops, ifs e elses, gambi mesmo&#8221;
</p>
<p>
Aí mostrei pra ele uma <a href="http://jsfromhell.com/number/fmt-money" rel="external">função</a> do <a href="http://jsfromhell.com/" rel="external">jsfromhell</a> que me pareceu melhor. Só que ela tem um pequeno problema, quando tenho números com mais de 16 dígitos ela buga retornando o número como notação, por exemplo: 2183213123e31. Não que eu vá ter valores maiores que 16 dígitos, mas resolvi fazer a que segue abaixo:
</p>
<pre class="sh_javascript">

String.prototype.currencyFormat = function (f, d, t) {
    var n = (n = this.match(/\d/g)) ? n.join('').replace(/^0+/,'') : '0', f = (f) ? f : 2, d = (d) ? d : ',', t = (t) ? t : '.';
    if (n.length < f + 1) return '0' + d + ((n.length < f) ? new Array(f - n.length + 1).join('0') + n : n)
    else return n.substr(0, n.length - f).split('').reverse().join('').match(/\d{1,3}/g).join(t).split('').reverse().join('') + d + n.substr(n.length - f)
}
</pre>
<p>
<a href='http://alisson.zusee.com/blog/wp-content/uploads/2008/08/currencyformat.js' title='currency format - formatar moeda'>Clique aqui para fazer download do código acima</a>
</p>
<p>
Os argumentos são (usei os mesmos da função do jsfromhell, achei o suficiente):<br />
<strong>f = número de casas decimais<br />
d = separador de decimos (&#8217;,&#8217; virgula por padrão)<br />
t = separador de milhar (&#8217;.&#8217; ponto por padrão)<br />
</strong>
</p>
<p>Exemplos:</p>
<pre class="sh_javascript">
&lt;input type="text" onkeyup="this.value = this.value.currencyFormat()" /&gt;
&lt;input type="text" onkeyup="this.value = this.value.currencyFormat(3)" /&gt;
&lt;input type="text" onkeyup="this.value = this.value.currencyFormat(3, ',', '.')" /&gt;
</pre>
</p>
<p>
Recomendo usar uma class nos campos que quiser formatar e fazer uma rotina para adicionar a função nos campos com a tal class. Quem quiser a função sem compactação para poder entender melhor é só pedir. Testado no Firefox 3 e no Internet Explorer 6. Até!</p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.zusee.com/blog/2008/08/22/currency-format-formatar-moeda/feed/</wfw:commentRss>
		</item>
		<item>
		<title>batch mp3 id3, altere o id3 dos seus arquivos .mp3 com agilidade :)</title>
		<link>http://alisson.zusee.com/blog/2008/04/06/batch-mp3-id3-altere-o-id3-dos-seus-arquivos-mp3-com-agilidade/</link>
		<comments>http://alisson.zusee.com/blog/2008/04/06/batch-mp3-id3-altere-o-id3-dos-seus-arquivos-mp3-com-agilidade/#comments</comments>
		<pubDate>Mon, 07 Apr 2008 01:43:45 +0000</pubDate>
		<dc:creator>Alisson</dc:creator>
		
		<category><![CDATA[misc]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[utils]]></category>

		<category><![CDATA[id3]]></category>

		<category><![CDATA[mp3]]></category>

		<category><![CDATA[util]]></category>

		<guid isPermaLink="false">http://alisson.zusee.com/blog/2008/04/06/batch-mp3-id3-altere-o-id3-dos-seus-arquivos-mp3-com-agilidade/</guid>
		<description><![CDATA[Update 1: Adicionei o módulo readline(valeu Tiago) que faz coisas muito interessantes no simples fato de importa-lo, histórico do que se digitou, as setas do teclado agora navegam no texto na hora da digitação, permite a implementação de auto completar e outras coisas mais.

Se você gosta das suas mp3 organizadas, como eu, isso será útil [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update 1:</strong> Adicionei o módulo <a href="http://docs.python.org/lib/module-readline.html">readline</a>(valeu <a href="http://tiago.zusee.com/blog">Tiago</a>) que faz coisas muito interessantes no simples fato de importa-lo, histórico do que se digitou, as setas do teclado agora navegam no texto na hora da digitação, permite a implementação de auto completar e outras coisas mais.</p>
</p>
<p>Se você gosta das suas mp3 organizadas, como eu, isso será útil para você.<br />Sempre faço download de albuns completos, e nem sempre todos os arquivos vem organizados com o id3 correto. Então fiz esse script para organizar mais rápido.</p>
<pre class="sh_python code">
from ID3 import *
import os, sys, readfile

# 2008-04-06
# batch mp3 id3, altere o id3 dos seus arquivos .mp3 com agilidade <img src='http://alisson.zusee.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
# Author: Alisson Sales <alisson [dot] sales [at] gmail [dot] com>
# http://alisson.zusee.com/
# http://alisson.zusee.com/blog

mp3s = []
last_artist = &#8221;
last_album = &#8221;

for root, dirs, files in os.walk(os.getcwd()):
    mp3s.extend([os.path.join(root, file) for file in files if os.path.splitext(file)[1] == &#8216;.mp3&#8242;])

mp3s.sort()

for mp3 in mp3s:
    id3info = ID3(mp3)
    print(os.path.basename(mp3))

    try:
        new_title = raw_input(&#8217;\tTitle: [%s] (type enter to keep it): &#8216; % id3info.title)

        if (last_artist):
            new_artist = raw_input(&#8217;\tArtist: [%s] (type enter to keep it, - to last artist entered &#8220;%s&#8221;): &#8216; % (id3info.album, last_artist))
        else:
            new_artist = raw_input(&#8217;\tArtist: [%s] (type enter to keep it): &#8216; % id3info.artist)

        if (last_album):
            new_album = raw_input(&#8217;\tAlbum: [%s] (type enter to keep it, - to last album entered &#8220;%s&#8221;): &#8216; % (id3info.album, last_album))
        else:
            new_album = raw_input(&#8217;\tAlbum: [%s] (type enter to keep it): &#8216; % id3info.album)

        if id3info.track:
            new_track_number = raw_input(&#8217;\tTrack #: [%s] (type enter to keep it): &#8216; % id3info.track)
        else:
            new_track_number = raw_input(&#8217;\tTrack #: [] (type enter to keep it): &#8216;)

    except KeyboardInterrupt:
        print(&#8217;\n\nApplication halted by the user\n&#8217;)
        sys.exit()

    if (new_title):
        id3info[&#8217;TITLE&#8217;] = new_title

    if (new_artist):
        if (new_artist == &#8216;-&#8217; and last_artist):
            id3info[&#8217;ARTIST&#8217;] = last_artist
        else:
            id3info[&#8217;ARTIST&#8217;] = new_artist
            last_artist = new_artist

    if (new_album):
        if (new_album == &#8216;-&#8217; and last_album):
            id3info[&#8217;ALBUM&#8217;] = last_album
        else:
            id3info[&#8217;ALBUM&#8217;] = new_album
            last_album = new_album

    if (new_track_number):
        id3info[&#8217;TRACKNUMBER&#8217;] = new_track_number

    print(&#8221;)
</pre>
<p>Você vai precisar do módulo ID3 instalado no seu python, que pode ser encontrado <a href="http://id3-py.sourceforge.net/" rel="external">aqui</a></p>
<p>Para usar vá até a pasta onde se encontram os arquivos .mp3 e execute o script: python batch_id3.py</p>
<p>Depois adiciono mais opções, por enquanto é só. <img src='http://alisson.zusee.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href='http://alisson.zusee.com/blog/wp-content/uploads/2008/04/batch_id3.py' title='batch id3'>Download do arquivo .py</a></p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.zusee.com/blog/2008/04/06/batch-mp3-id3-altere-o-id3-dos-seus-arquivos-mp3-com-agilidade/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Script em python para backup de bancos de dados firebird</title>
		<link>http://alisson.zusee.com/blog/2008/03/30/script-em-python-para-backup-de-bancos-de-dados-firebird/</link>
		<comments>http://alisson.zusee.com/blog/2008/03/30/script-em-python-para-backup-de-bancos-de-dados-firebird/#comments</comments>
		<pubDate>Mon, 31 Mar 2008 04:53:31 +0000</pubDate>
		<dc:creator>Alisson</dc:creator>
		
		<category><![CDATA[python]]></category>

		<category><![CDATA[backup]]></category>

		<category><![CDATA[firebird]]></category>

		<category><![CDATA[util]]></category>

		<guid isPermaLink="false">http://alisson.zusee.com/blog/?p=14</guid>
		<description><![CDATA[
import subprocess
from datetime import datetime

# 2008-03-30
# A little script to backup firebird databases
# Author: Alisson Sales 

# path to gbak (firebird backup utility)
FB_GBAK       = &#8216;gbak&#8217;

# parameters for gbak (list)
FB_PARAMS     = [FB_GBAK, &#8216;-t&#8217;, &#8216;-user&#8217;, &#8216;SYSDBA&#8217;, &#8216;-pas&#8217;, &#8216;masterkey&#8217;]

# full path to database&#8217;s directory
FB_DB_DIR     [...]]]></description>
			<content:encoded><![CDATA[<pre class="sh_python code">
import subprocess
from datetime import datetime

# 2008-03-30
# A little script to backup firebird databases
# Author: Alisson Sales <alisson [dot] sales [at] gmail [dot] com>

# path to gbak (firebird backup utility)
FB_GBAK       = &#8216;gbak&#8217;

# parameters for gbak (list)
FB_PARAMS     = [FB_GBAK, &#8216;-t&#8217;, &#8216;-user&#8217;, &#8216;SYSDBA&#8217;, &#8216;-pas&#8217;, &#8216;masterkey&#8217;]

# full path to database&#8217;s directory
FB_DB_DIR     = &#8216;/var/lib/firebird/2.0/data/&#8217;

# a tuple of databases to backup
FB_DATABASES  = (
    &#8216;DATABASE1.GDB&#8217;,
    &#8216;DATABASE2.GDB&#8217;
)

# full path to backup directory
FB_BACKUP_DIR = &#8216;/home/alisson/backup/firebird/&#8217;;

# path to data compressor (bzip2, zip, rar, gzip)
COMPRESSOR = &#8216;bzip2&#8242;

# just a shortcut
timestamp = lambda: datetime.now().strftime(&#8217;%Y-%m-%d %H:%M:%S&#8217;)

for db in FB_DATABASES:

    # sufix to backup filename
    sufix = &#8216;.&#8217; + datetime.now().strftime(&#8217;%Y%m%d_%H%M%S&#8217;) + &#8216;.fbk&#8217;

    print &#8220;[%s] Starting backup of file %s&#8221; % (timestamp(), db)

    backup = []
    backup.extend(FB_PARAMS)
    backup.append(FB_DB_DIR + db)
    backup.append(FB_BACKUP_DIR + db + sufix)
    p = subprocess.Popen(backup, stderr=subprocess.PIPE)
    p.wait()
    error = p.communicate()[1]

    if not error:
        print &#8220;[%s] Backup is done.&#8221; % timestamp()
    else:
        print &#8220;[%s] Error:\n%s&#8221; % (timestamp(), error)

    print &#8220;[%s] Starting compression of backup file %s&#8221; % (timestamp(), db + sufix)

    compress = []
    compress.append(COMPRESSOR)
    compress.append(FB_BACKUP_DIR + db + sufix)
    p = subprocess.Popen(compress, stderr=subprocess.PIPE)
    # preventing too much use of CPU, compressing 1 file per time
    p.wait()
    error = p.communicate()[1]

    if not error:
        print &#8220;[%s] Compression is done.\n&#8221; % timestamp()
    else:
        print &#8220;[%s] Error:\n%s&#8221; % (timestamp(), error)</pre>
</pre>
<p>Adicionando no cron, no shell digite:</p>
<pre class="sh_sh">
crontab -e
</pre>
<p>
O cron abrirá o editor para edição.<br />
Então adicione:
</p>
<pre class="sh_sh">
0   3   *   *   *   /home/USUARIO/backup_firebird.py > /var/log/backup_firebird.log
</pre>
<p>Isso fará com que o script seja executado diariamente as 3 da manhã e grave o log em /var/log/backup_firebird.log</p>
<p><a href='http://alisson.zusee.com/blog/wp-content/uploads/2008/04/backup_firebird.py' title='Backup firebird'>Download do arquivo .py</a></p>
<p><strong>Mais sobre o módulo subprocess</strong>:<br />
<a href="http://www.oreillynet.com/onlamp/blog/2007/08/pymotw_subprocess_1.html" rel="external">PyMOTW: subprocess - O&#8217;Reilly ONLamp Blog</a><br />
<a href="http://www.python.org/doc/lib/node528.html">Python Library Reference</a></p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.zusee.com/blog/2008/03/30/script-em-python-para-backup-de-bancos-de-dados-firebird/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ande pela cidade com o mapjack!</title>
		<link>http://alisson.zusee.com/blog/2008/03/29/ande-pela-cidade-com-o-mapjack/</link>
		<comments>http://alisson.zusee.com/blog/2008/03/29/ande-pela-cidade-com-o-mapjack/#comments</comments>
		<pubDate>Sat, 29 Mar 2008 23:48:31 +0000</pubDate>
		<dc:creator>Alisson</dc:creator>
		
		<category><![CDATA[tecnologia]]></category>

		<category><![CDATA[google maps]]></category>

		<category><![CDATA[mapjack]]></category>

		<guid isPermaLink="false">http://alisson.zusee.com/blog/?p=13</guid>
		<description><![CDATA[Estava lendo meus fees li esse post e conheci o mapjack, http://www.mapjack.com/
A qualidade das fotos é impressionante, você pode usar as setas do teclado e ir adando pela cidade, ajustar a projeção da foto, o zoom, entre outros.
Será que o google vai comprar a tecnologia dos caras ou melhorar a que já tem usada no [...]]]></description>
			<content:encoded><![CDATA[<p>Estava lendo meus fees li <a href="http://googlesystem.blogspot.com/2008/03/mapjack-better-google-street-view.html" rel="external">esse post</a> e conheci o mapjack, <a href="http://www.mapjack.com/" rel="external">http://www.mapjack.com/</a></p>
<p>A qualidade das fotos é impressionante, você pode usar as setas do teclado e ir adando pela cidade, ajustar a projeção da foto, o zoom, entre outros.</p>
<p>Será que o google vai comprar a tecnologia dos caras ou melhorar a que já tem usada no <a href="http://books.google.com/help/maps/streetview/" rel="external">google maps, street view</a>?</p>
<p>Mais:<br />
<a href="http://mapperz.blogspot.com/2008/03/streetview-mapjack-vs-google.html">review google street X mapjack</a></p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.zusee.com/blog/2008/03/29/ande-pela-cidade-com-o-mapjack/feed/</wfw:commentRss>
		</item>
		<item>
		<title>IssoCusta nova versão, grandes mudanças</title>
		<link>http://alisson.zusee.com/blog/2008/03/20/issocusta-nova-versao-grandes-mudancas/</link>
		<comments>http://alisson.zusee.com/blog/2008/03/20/issocusta-nova-versao-grandes-mudancas/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 00:19:32 +0000</pubDate>
		<dc:creator>Alisson</dc:creator>
		
		<category><![CDATA[django]]></category>

		<category><![CDATA[projetos]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[issocusta]]></category>

		<guid isPermaLink="false">http://alisson.zusee.com/blog/?p=11</guid>
		<description><![CDATA[Acabei de colocar no ar as mudanças do IssoCusta. A idéia inicial do site tinha muitas semelhanças com um site de classificados, então o tornamos de vez um site de classificados, com alguns diferenciais. Um deles é que o usuário pode adicionar no mapa a localização do que está anunciando, assim as outras pessoas podem [...]]]></description>
			<content:encoded><![CDATA[<p>Acabei de colocar no ar as mudanças do <a href="http://www.issocusta.com" rel="external">IssoCusta</a>. A idéia inicial do site tinha muitas semelhanças com um site de classificados, então o tornamos de vez um site de classificados, com alguns diferenciais. Um deles é que o usuário pode adicionar no mapa a localização do que está anunciando, assim as outras pessoas podem chegar mais fácil até ele, o google maps ainda permite que o usuário que visita um anuncio possa ver como chegar até o seu destino. Os usuários votam nos anúncios que acham interressantes criando um rank. Temos vários recursos que iremos implementar aos poucos. Visite o <a href="http://blog.issocusta.com/">blog IssoCusta</a> e fique sabendo quando atualizarmos algo.</p>
<p>Espero que gostem <img src='http://alisson.zusee.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.zusee.com/blog/2008/03/20/issocusta-nova-versao-grandes-mudancas/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Issocusta.com beta!</title>
		<link>http://alisson.zusee.com/blog/2008/01/21/issocustacom-beta/</link>
		<comments>http://alisson.zusee.com/blog/2008/01/21/issocustacom-beta/#comments</comments>
		<pubDate>Mon, 21 Jan 2008 20:55:12 +0000</pubDate>
		<dc:creator>Alisson</dc:creator>
		
		<category><![CDATA[django]]></category>

		<category><![CDATA[misc]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[projetos]]></category>

		<guid isPermaLink="false">http://alisson.zusee.com/blog/?p=10</guid>
		<description><![CDATA[O issocusta.com é um projeto concebido para ser um indexador de preços no mundo real ou não. A idéia é que os usuários coloquem preços de ofertas vistas em qualquer lugar e também colocar preços de ofertas de algo que estão querendo vender. O objetivo é claro, queremos montar uma base de dados onde perguntas [...]]]></description>
			<content:encoded><![CDATA[<p>O <a href="http://www.issocusta.com" rel="external">issocusta.com</a> é um projeto concebido para ser um indexador de preços no mundo real ou não. A idéia é que os usuários coloquem preços de ofertas vistas em qualquer lugar e também colocar preços de ofertas de algo que estão querendo vender. O objetivo é claro, queremos montar uma base de dados onde perguntas como “Quando custa aquela cerveja naquele local?” e “Quanto custa os ingressos do show?” serão respondidas pelos próprios usuários. Uma comparação à <a href="http://wikipedia.org" rel="external">Wikipedia</a> é obrigatória, a Wikipedia é uma base de dados de conhecimento e colaborativa. Somos uma base de dados de ofertas e colaborativa. A idéia se assemelha a do <a href="http://www.craigslist.org" rel="external">Craiglist</a>, site americano de anúncios, mas tentamos ser uma forma diferenciada da idéia do Craiglist e de outros sites de anúncios. Temos mapas, preços podem ou não ser revisados por outros usuários. Temos também ranking e comentários. O issocusta.com se preocupa em resolver o problema localmente, isso é, usuários vêm somente as ofertas da cidade escolhida e as independente de cidade (ofertas de internet por exemplo).</p>
<p>Para criar o issocusta.com utilizamos a linguagem <a href="http://python.org" rel="external">Python</a> e o framework <a href="http://djangoproject.com" rel="external">Django</a> que tornou o nosso sonho bem mais possível num curto espaço de tempo. Utilizamos <a href="http://pt.wikipedia.org/wiki/MySQL" rel="external">MySQL</a> para nossa base de dados, Linux (<a href="http://archlinux.org" rel="external">ArchLinux</a>) em nosso servidor e <a href="http://en.wikipedia.org/wiki/Mercurial_%28software%29" rel="external">Mercurial</a> para gerenciamento de código.  A escolha dessas tecnologias se deram por vários motivos, mas acima de tudo porque servem para nós e resolvem muito bem as nossas necessidades.</p>
<p>O issocusta.com será lançado oficialmente em alguns dias, <b>ainda estamos corrigindo bugs</b> (reportem eles por favor!), adicionando e retirando algumas funcionalidades e, claro, testando.</p>
<p>Como desenvolvedor e entusiasta espero que o issocusta.com agrade a muitos e que seja realmente útil.</p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.zusee.com/blog/2008/01/21/issocustacom-beta/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Internet Explorer 8 passando no teste ACID 2</title>
		<link>http://alisson.zusee.com/blog/2007/12/20/internet-explorer-8-passando-no-teste-acid-2/</link>
		<comments>http://alisson.zusee.com/blog/2007/12/20/internet-explorer-8-passando-no-teste-acid-2/#comments</comments>
		<pubDate>Thu, 20 Dec 2007 13:26:17 +0000</pubDate>
		<dc:creator>Alisson</dc:creator>
		
		<category><![CDATA[browsers]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[acid]]></category>

		<category><![CDATA[firefox]]></category>

		<category><![CDATA[ie]]></category>

		<category><![CDATA[opera]]></category>

		<guid isPermaLink="false">http://alisson.zusee.com/blog/?p=8</guid>
		<description><![CDATA[Desenvolvedores do Internet explorer 8 anunciam que o browser já rederiza corretamente o Acid2 Browser Test. Veja a screeshot logo abaixo.

Alguma novidade pra quem usa Opera? Acho que não, a mais de um ano o Opera já passava nesse teste. Mas o Firefox 2 aqui não passa, porém o Firefox 3 alpha já passou. Será [...]]]></description>
			<content:encoded><![CDATA[<p>Desenvolvedores do Internet explorer 8 anunciam que o browser já rederiza corretamente o <a href="http://www.webstandards.org/action/acid2/" rel="external">Acid2 Browser Test</a>. Veja a screeshot logo abaixo.</p>
<p><img src='http://alisson.zusee.com/blog/wp-content/uploads/2007/12/acidtest2.PNG' alt='internet explorer 8 passando no acid 2' /></p>
<p>Alguma novidade pra quem usa <a href="http://www.opera.com/" rel="external">Opera</a>? Acho que não, a mais de um ano o Opera já passava nesse teste. Mas o <a href="http://www.mozilla.com/firefox/" rel="external">Firefox</a> 2 aqui não passa, porém o Firefox 3 alpha já passou. Será que agora os problemas de CSS na hora do <a href="http://pt.wikipedia.org/wiki/Cross-browser" rel="external">crossbrowser</a> vão diminuir? Agora não, mas daqui a alguns anos&#8230; quem sabe? E o javascript? Ah.. isso é outra história&#8230;</p>
<p><a href="http://blogs.msdn.com/ie/archive/2007/12/19/internet-explorer-8-and-acid2-a-milestone.aspx" rel="external">Post oficial no blog do IE</a></p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.zusee.com/blog/2007/12/20/internet-explorer-8-passando-no-teste-acid-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Apareci como primeiro no google</title>
		<link>http://alisson.zusee.com/blog/2007/12/19/ja-apareco-no-google/</link>
		<comments>http://alisson.zusee.com/blog/2007/12/19/ja-apareco-no-google/#comments</comments>
		<pubDate>Wed, 19 Dec 2007 15:10:33 +0000</pubDate>
		<dc:creator>Alisson</dc:creator>
		
		<category><![CDATA[misc]]></category>

		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://alisson.zusee.com/blog/?p=7</guid>
		<description><![CDATA[
  
]]></description>
			<content:encoded><![CDATA[<p><img src='http://alisson.zusee.com/blog/wp-content/uploads/2007/12/alisson_sales_google.gif' alt='apareci no google' /></p>
<p> <img src='http://alisson.zusee.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.zusee.com/blog/2007/12/19/ja-apareco-no-google/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Casando expressões regulares e substituindo com javascript</title>
		<link>http://alisson.zusee.com/blog/2007/12/17/casando-varias-expressoes-regulares-e-substituindo-com-javascript/</link>
		<comments>http://alisson.zusee.com/blog/2007/12/17/casando-varias-expressoes-regulares-e-substituindo-com-javascript/#comments</comments>
		<pubDate>Mon, 17 Dec 2007 13:48:33 +0000</pubDate>
		<dc:creator>Alisson</dc:creator>
		
		<category><![CDATA[expressão regular]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[expressões regulares]]></category>

		<category><![CDATA[regular expressions]]></category>

		<guid isPermaLink="false">http://alisson.zusee.com/blog/?p=5</guid>
		<description><![CDATA[window.onload = function () {
    var i = 0,
      ers = [new RegExp('ER_1', 'gi'),
             new RegExp('ER_2', 'gi'),
             new RegExp('ER_3', 'gi')],
toReplace = ['String 1',
 [...]]]></description>
			<content:encoded><![CDATA[<pre class="sh_javascript">window.onload = function () {
    var i = 0,
      ers = [new RegExp('ER_1', 'gi'),
             new RegExp('ER_2', 'gi'),
             new RegExp('ER_3', 'gi')],
toReplace = ['String 1',
             'String 2',
             'String 3'],
  content = document.body.innerHTML;

    for (i; i <= ers.length; i++) {
        content = content.replace(ers[i], toReplace[i])
    }

    document.body.innerHTML = content
}
</pre>
<p>Acabei nem usando pois os arquivos que precisava alterar não tinham nenhum padrão, então iriam ser muiiiiitas ERs. Usei o <a href="http://www.gnu.org/software/sed/" rel="external">GNU sed</a> para a maioria e alguns foi no olho mesmo. Para quem não conhece <a href="http://pt.wikipedia.org/wiki/Express%C3%A3o_regular" rel="external">Expressões Regulares</a> abaixo vão algumas dicas:
<ul>
<li><a href="http://guia-er.sourceforge.net/" rel="external">Expressões Regulares - Guia de Consulta Rápida</a></li>
<li><a href="http://aurelio.net/er/livro/" rel="external">Expressões Regulares - Uma Abordagem Divertida</a></li>
<li>Mais sobre expressões regulares em javascript: <a href="http://www.w3schools.com/js/js_obj_regexp.asp" rel="external">JavaScript RegExp Object</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://alisson.zusee.com/blog/2007/12/17/casando-varias-expressoes-regulares-e-substituindo-com-javascript/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Saindo do bloglines</title>
		<link>http://alisson.zusee.com/blog/2007/12/13/saindo-do-bloglines/</link>
		<comments>http://alisson.zusee.com/blog/2007/12/13/saindo-do-bloglines/#comments</comments>
		<pubDate>Thu, 13 Dec 2007 17:24:17 +0000</pubDate>
		<dc:creator>Alisson</dc:creator>
		
		<category><![CDATA[misc]]></category>

		<category><![CDATA[bloglines]]></category>

		<category><![CDATA[cotidiano]]></category>

		<category><![CDATA[feeds]]></category>

		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://alisson.zusee.com/blog/?p=4</guid>
		<description><![CDATA[Agora a pouco entrei no bloglines e levei um susto, 51064 posts para ler!
A algum tempo já estava chateado com erros que sempre aconteciam na versão beta e na &#8220;estável&#8221;, feeds que eu acabava de ler e retornavam algum tempo depois todos os posts como não lidos mesmo sem ocorrer nenhuma alteração. Sem falar nas [...]]]></description>
			<content:encoded><![CDATA[<p>Agora a pouco entrei no bloglines e levei um susto, <strong>51064 posts para ler!</strong><br />
A algum tempo já estava chateado com erros que sempre aconteciam na versão <a href="http://beta.bloglines.com" rel="external">beta</a> e na <a href="http://www.bloglines.com" rel="external">&#8220;estável&#8221;</a>, feeds que eu acabava de ler e retornavam algum tempo depois todos os posts como não lidos mesmo sem ocorrer nenhuma alteração. Sem falar nas vezes que precisava clicar mais de uma vez na lista de feeds para que o feed carregasse. Bem.. isso foi o bastante para eu mudar de agregador de feeds, vou usar o <a href="www.google.com/reader/" rel="external">google reader</a>. O que me incomoda é o fato de depender cada vez mais das ferramentas do google. Outro dia fui precisei consultar uma planilha que está salva no <a href="http://docs.google.com" rel="external">google docs</a> e a planilha <strong>não estava disponível</strong>! Eu não tinha cópia no meu desktop, o jeito foi recorrer a algumas anotações e vasculhar na memória o que precisava. Depois de muito tempo a planilha apareceu denovo&#8230; Fazer o que, é de graça neh?!</p>
<p>
Update 1:<br />
Fui tentar agora deletar minha conta lá do <a href="www.bloglines.com" rel="external">bloglines</a>, mas quem disse que achei o link para isso? Mandei um e-mail pra lá perguntando como fazer tal. Só me deu mais certeza de que fiz a escolha certa. Espero que me respondam&#8230;
</p>
<p>
Update 2: Até o momento(21/12/2007) não me responderam.. acho que estou preso no <strong>buraco negro chamado <em>Bloglines</em></strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.zusee.com/blog/2007/12/13/saindo-do-bloglines/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
