Eugeni's blog

One blog to rule them all. Kinda.

Browsing the 2008 December archive

Ééééé, mais um ano está se acabando..

Nesse em particular aconteceram muitas coisas comigo. E, seguindo a tradição dos últimos anos, só posso falar duas coisas: – A cada ano parece que o tempo passa mais e mais rápido – Todos os planos feitos no começo do ano acabam se transformando de forma inacreditável :) .

Bem, alguns dos destaques de 2008, que logo-logo vai ficar no passado:

  • Encontrei a Vanessa (sem dúvida alguma uma das coisas mais legais de 2008 :) )!
  • Fui para Salvador no carnaval. Foi uma experiência única e inesquecível :) .
  • Saí da mstech, depois de 5 anos lá. Aprendi muito lá, fiz diversos projetos interessantes, achei amigos para toda a vida e cresci muito. Mas chegou a hora de procurar novos desafios..
  • Adiantei de forma inacreditável as coisas do doutorado. Se no fim do ano passado eu não sabia nem para onde ele estava indo, e hoje posso falar que o projeto está praticamente terminado, e é um projeto BOM.
  • Entrei para Mandriva. Para mim isso é particularmente interessante – estou mexendo com Linux já faz mais de 10 anos, mas nunca trabalhei em nenhum lugar que trabalhasse diretamente com software livre.
  • Realizei diversos projetos para Intel (com ajuda do Paulo, é claro).
  • Li mais de 300 livros no meu N800. Encontrei diversos livros que realmente marcaram a minha vida e fizeram pensar nela.
  • Conheci diversas cervejas diferentes (novo hobby), e comecei a “degustar” vinhos bons. Casillero Del Diablo, de 2007.. hummm…
  • Consolidei o meu hobby de fotografia. Algumas fotos receberam milhares de visitas, algumas centenas.. Mas, observando as fotos antigas e comparando com as de hoje, consigo notar o meu crescimento pessoal nitidamente.

E muitas outras coisas.

De forma geral, 2008 foi bom. Corrido, mas bom. Vamos para 2009 agora!

  • 21:23 Listening to new Nickelback album for 11th time straight. Wow! #

Automatically shipped by LoudTwitter


Ituverava, originally uploaded by eugeni_dodonov.

A primeira foto tirada com o meu novo Nokia N95!

Ou melhor.. a primeira foto editada e panoramatizada tirada com o N95 :) .

  • 11:28 ..back to work.. I prefer beach however :) #

Automatically shipped by LoudTwitter

  • 14:50 The next revolution in computing: "beer-to-beer networks" :) #

Automatically shipped by LoudTwitter

  • 13:20 Dúvida difícil.. Erdinger vs Baden Baden vs Guinness vs Paulaner vs Franciskaner…. #
  • 15:47 Depois de alguns anos sonhando, finalmente to com um N95!! Éééééé!! :) :) #

Automatically shipped by LoudTwitter

  • 09:51 @lordspy eu acho que é só na Rússia que existe ICQ ainda. Nenhum outro IM tem nem 1% de popularidade dele lá.. #
  • 12:13 os.path.exists(self.path) or (not really and self.suffix and os.path.exists(self.path + self.suffix)) . não parece, mas é python. meu deus.. #
  • 14:20 Results of hard work: git diff master..work|diffstat -> 4 files changed, 1779 insertions(+), 1705 deletions(-) #
  • 14:47 Revolution Renaissance new cd! tinyurl.com/4z874m #

Automatically shipped by LoudTwitter

Perl would be Voodoo – An incomprehensible series of arcane incantations that involve the blood of goats and permanently corrupt your soul. Often used when your boss requires you to do an urgent task at 21:00 on friday night.

huauhahahahaha

via Aegisub: If programming languages were religions….

  • 12:41 autofs, autofs.. bem que você podia colaborar mais um pouco comigo… #
  • 13:55 while true; do xset led; sleep 1; xset -led; sleep 1; done – árvore de natal :) #
  • 21:45 aprendi autofs hoje.. nunca precisei usar ele antes na vida. Mas nada como ir a fundo para investigar um bug :) . #
  • 23:49 3d acceleration do Virtualbox 2.1 realmente funciona!!! Inacreditável!! #

Automatically shipped by LoudTwitter

  • 23:22 ..eu achava que era difícil escrever código ilegível em python.. até ver o código do msec… #

Automatically shipped by LoudTwitter

  • 20:16 Depois de 9 meses de buscas, finalmente encontrei para vender a melhor cerveja do mundo – Guinness! Por R$ 8.90!! Life is good again! :) #
  • 22:35 @lordspy em botucatu.. tinha visto também em outros lugares, mas não por esse preço. Deu até vontade de levar o estoque inteiro :) . #
  • 23:17 …there is life after glibc 2.9 upgrade… #

Automatically shipped by LoudTwitter

  • 09:46 @lordspy tem Mashina Vremeni e Akvarium.. outras bandas começaram em 1980 ou 1981 (alisa, ddt, kino, piknik, chizh, aria, krematorii..). #
  • 23:39 (sabedoria antiga) programar com alcool no sangue é bom.. mas tem que fazer commits periódicos, senão depois de ver o código.. ai ai.. :) #

Automatically shipped by LoudTwitter

Atualizei o wordpress para 2.7. A interface de administração melhorou MUITO. Vamos ver se tudo continua funcionando.. hehe

Ultimamente eu uso bastante programação funcional em python para tudo. Entretanto, fiquei brincando hoje e descobri que nem sempre ela oferece os melhores resultados.

Por exemplo, vamos imaginar a função que vai fazer todas as combinações entre os elementos de uma lista. Ela pode ser escrita de forma funcional:

# permutate-func
def permutate(l):
    '''Returns all possible combinations of list values'''
    return reduce(lambda x, y: y + x, [ [(x, y) for y in l if x != y] for x in l ])

ou de forma iterativa:

# permutate-iter
def permutate(l):
    '''Returns all possible combinations of list values'''
    res = []
    for x in l:
        for y in l:
            if x != y:
                res.append((x, y))
    return res

Para listas pequenas não temos muita diferença de desempenho. Agora para listas maiores (por exemplo, com 1000 strings):

dups=['string%d' % x for x in range(1000)]
permutate(dups)

temos os seguintes resultados para programação funcional:

# time permutate-func
real    0m24.494s
user    0m20.763s
sys 0m1.698s

e os seguintes para o algoritmo iterativo:

# time permutate-iter
real    0m1.191s
user    0m1.150s
sys 0m0.036s

O tempo de 24 segundos caiu para apenas 1 segundo!

Qual conclusão tiramos disso? Embora programação funcional é extremamente poderosa, em alguns casos é melhor usar outras soluções para o problema :) .

Descobri mais uma utilidade para os decorators em python:

import threading

class Thread(threading.Thread):
    def __init__(self, f):
        threading.Thread.__init__(self)
        self.run = f

@Thread
def func():
    print "Hello world!"

func.start()

Jeito simples e eficientes para criar funções threadizadas.

Update: É possível otimizar esse código para não precisar escrever .start() na mão, e deixar as funções compatíveis com a sua versão não-threadizada:

class Thread(threading.Thread):
    def __init__(self, f):
        threading.Thread.__init__(self)
        self.run = f

    def __call__(self):
        return self.start()

@Thread
def func():
    print "Hello world!"

func()

Realmente, não tem jeito de habilitar cairo-lcd no firefox-nightly. O firefox (na sua versão atual) está usando funcionalidades de cairo que não foram integradas ao repositório oficial ainda.

Embora o 3.1 (e o 3.2a1) são MUITO mais rápidos que o firefox 3 comum, a aparence do firefox3 usando system-cairo dá de 10×0 neles.

Ahh que dúvida difícil.. Será que fico com o firefox lento+bonitinho, ou rápido+pouco legível??

Descobriremos nos próximos capítulos de Eugeni vs Firefox! :)

No dia 15 de março de 2009 (que já está chegando!) Iron Maiden estará em São Paulo novamente, em Interlagos.

A venda de ingressos começou ontem a meia-noite, e as 00:02 mais ou menos o meu já estava comprado.

E (obviamente) ele não foi o primeiro, mais ou menos umas 100 pessoas tinham comprado antes de mim já (pelo menos, o número de série no ingresso diz isso).

Agora só esperar…

Up the irons! :)