Archive for September, 2009

Chromium e Slackware

Wednesday, September 30th, 2009

Chromium

Finalmente após anos de tortura tendo que aguentar as travadas do Firefox chegou o momento de ter um browser leve, rápido e com renderização de fontes decente no linux. Chegou a vez do Chromium, projeto open source do Google que é a fonte do browser Chrome. Um amigo meu estava usando ele no ubuntu eu resolvi rodar ele no Slackware. Descreverei o processo de instalação e a minha análise sobre esse beta.

Primeiro instale o mozilla-nss a provável unica dependência que você vai precisar.

Eu não criei um pacote para o chromium, talvez eu o faça no futuro. Até lá baixe o ultimo tarball e rode só pro seu usuário, caso você tenha problemas com os nomes estranhos criados pelo pessoal que empacota para o debian (alguém faz ideia de por que o .d??) faça o seguinte que tirei daqui.

ln -s /usr/lib/libplds4.so /usr/lib/libplds4.so.1d
ln -s /usr/lib/libnss3.so /usr/lib/libnss3.so.1d
ln -s /usr/lib/libsmime3.so /usr/lib/libsmime3.so.1d
ln -s /usr/lib/libssl3.so /usr/lib/libssl3.so.1d
ln -s /usr/lib/libnssutil3.so /usr/lib/libnssutil3.so.1d
ln -s /usr/lib/libnspr4.so /usr/lib/libnspr4.so.0d
ln -s /usr/lib/libplc4.so /usr/lib/libplc4.so.0d
ln -s /usr/lib/libplds4.so /usr/lib/libplds4.so.0d

Tente rodar o chrome primeiro, pode ser que tenha mudado no ultimo build. And there you go. :)

Usando um tema escuro pra ficar mais discreto.

Usando um tema escuro pra ficar mais discreto.

A análise: é rápido, muito rápido. Tem corretor ortográfico . E tudo que tem na versão windows. Ainda não tem sua ferramenta que substitui o Firebug madura o suficiente para ser usada ao invés do inseto flamejante mas da pro gasto em toda a parte de navegação. Outro contra é a falta de gears mas dizem que o próprio html 5 terá suporte para armazenagem, aguardaremo então até o Chromium e o GMail darem suporte para isso. :/

Guardando Windows no Armário e Restaurando

Sunday, September 20th, 2009
Autochk.exe Not Found, Lembra de mudar o tipo da partição.

Autochk.exe Not Found, Lembre-se de mudar o tipo da partição.

Todo nerd sabe que partições ocupadas são tão tentadoras a formatação pra instalação de novos sistemas quanto as vazias, se não mais. A uns 4 meses atrás eu estava com um windows xp em uma partição de 30G. Queria formatar testar o kde4 do slackware current mas não podia perder meu progresso no CS Condition Zero e no Abe’s Exodus então eu resolvi colocar a partição pra dormir no hd externo. Pra isso eu usei o dd pra fazer um backup em arquivo.

# dd if=/dev/sda1 of=/mnt/data/windows.img

Formatei a partição e instalei o Slackware 13.0. Isso manteve meu windows dormindo por 4 meses quando bateu aquela vontade de jogar um CS. Pensei tudo bem, como as partições não haviam mudado de tamanho bastava um dd denovo e tudo estaria devolta. Ledo engano, apesar de o $ dd if=/mnt/data/windows.img of=/dev/sda1 ter sido um sucesso, descomentei as linhas do lilo.conf que colocavam o windows devolta no boot e reiniciei, tela de boot. Então uma rápida mensagem avisando que faltava um tal de autochk.exe uma tela azul (bsod pros intimos) e um restart. Depois de um tempo pesquisando eu peguei o pulo do gato. Quanto eu formatei minha partição para instalação do slackware seu tipo mudou de HPFS NTFS para Linux. Rodei o cfdisk mudei pra 0×07 (HPFS NTFS) e rebootei. Bingo, tudo funcionou, meu cs ta la como antes :D .

Ai fica a dica, se quiser guardar seu windows ou outro sistema no armário por um tempo execute os dois comandos acima quando julgar necessário. E atente ao tipo da partição quando for restaurar de Linux para Windows e vice-versa. Para verificar o tipo é só rodar um fdisk -l /dev/xxx onde xxx é seu disco. Ex:

root@theguide:~# fdisk -l /dev/sda

Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Disk identifier: 0xc6c894fd

Dispositivo Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        3824    30716248+   7  HPFS ou NTFS
/dev/sda2            3825        7648    30716280   83  Linux
/dev/sda3            7649       14465    54757552+  83  Linux
/dev/sda4           14466       14593     1028160   82  Linux swap

Asimov, Isaac: Fundação e Império & Segunda Fundação

Friday, September 18th, 2009
Fundação 2 e 3

Ainda lendo a ultima edição da Editora Aleph

Simplesmente genial, é o minimo que eu posso falar da trilogia. Ambos os ultimos livros da série são uma leitura muito agradavel e intensa. Como os anos em todos eles passam muito rapido, você nem sente os séculos passarem de tão bom </infamia>. :P

Fundação e Império

Depois de conseguir acertar as questões políticas nos 4 reinos que agora estão sob influência e dominio da Fundação é hora de enfrentar um ex amigo e poderoso inimigo. O antigo grande império que antes apadrinhava a Fundação agora fará sua tentativa de destruir a mesma mas representa uma ameaça muito pequena se comparada a um único homem, alguém que só é conhecido como O Mulo e não estava nos planos de Seldon.

Segunda Fundação

Continuação e final da participação do Mulo assim como todo o processo de “concerto” do Plano Seldon devido ao estrago feito pelo despota. Nesse livro a Segunda Fundação finalmente da as suas caras e o desfecho da trilogia é digno de aplauso.

Nota: A trilogia é muito boa, da uma pena saber que acabou :~. Mas ainda tem alguns anexos que valem a pena serem lidos. Verei quando consigo Fundação e a Terra e Prelúdio da Fundação. Mas vamos ler a série dos robos antes. ;)

Magia Negra das Threads em Python

Thursday, September 17th, 2009
Python Threads

Python Threads

Certo dia estava eu a pensar sobre a vida o universo e tudo mais e antes que 42 viesse a minha mente foi pedido que eu implementasse um disparador de SMS’s. Para isso eu precisava fazer disparos simultâneos em X canais gsm. Requisito óbvio: preciso de threads. PHP, a linguagem que usamos para quase tudo na aplicação não tem um suporte bom a threads então fui atrás de outra linguagem para o fazer.

Python atravessou meu caminho e nas minhas brincadeiras com a cobra (ui!) eu apanhei, jesus sabe que eu apanhei dessa pseudo-linguagem medonha e caracu (eu xinguei de coisa pior enquanto era humilhado pela até então ignorância na linguagem). Eu apanhei por que o mau costume de só ter usado Java (pausa para uivos e pedras….) para trabalhar com threads me deixou preguiçoso e mau acostumado a uma declaração bem mais simples de sincronismo entre métodos, bastava um synchronized e tudo estava funcionando.

Python ao contrário de Java não é nada thread-safe. Todas as chamadas simples podem ser desastrosas se mexem com recursos compartilhados entre as threads.

Sincronizando

Já que a python não é thread-safe temos que assumir essa responsabilidade no lugar da linguagem e sincronizar as chamadas com Locks, Semáforos e afins. Não é o fim do mundo, mas que é chato, é. Se quizermos por exemplo fazer a inserção de dados no banco de dados e ter o resultado disso logo após cada insert devemos sincronizar os inserts e commits já que o componente MySQLdb não faz esse controle para nós.

class Inserter(object):
    def __init__(self, lck,db):
        self.lock = lck;
        self.db = db

    def insert(self, insert):
        cursor = self.db.cursor()
        try:
            self.lock.acquire()
            cursor.execute(insert)
            cursor.execute("commit")
        finally:
            self.lock.release()

Queue

Outro componente muito útil quando se utiliza threads são as Filas. Filas são fifos (first-in first-out) que enfileiram ações que você gostaria que fossem executadas em paralelo por threads ou que simplesmente sejam executadas em determinada ordem.

# Importamos o módulo
from Queue import Queue

def run(self):
        while True:
            try:
                self.lock.acquire();
                if self.fila.empty():
                    break
                item = self.fila.get()
            finally:
                self.lock.release()

            self.printer.imprime(item)

Uma nota sobre Filas é que não se deve usar um if not queue.empty() e depois tentar dar um queue.get() já que no tempo entre esses dois acessos aos métodos outra thread pode pegar o ultimo elemento. É necessário que você simplesmente pegue o elemento e trate a exceção ou use Lock nessa parte do método.

ps. estranho, mas python implementa LIFO (pilha) no modulo Queue. :P

Vivo Fail

Friday, September 11th, 2009
Estagiário Detected!

Estagiário Detected!

A imagem fala por si mesma. O link para dessa façanha circulou pela internet com uma facilidade e velocidade absurda.

Convites para o SoLiSC

Sunday, September 6th, 2009

Maddog convida para o SoLiSC:

Vendo o video direto no YouTube tem legendas. :)

E uma galerinha de peso também o fez:

Sérgio Amadeu Professor da Faculdade Casper Libero.

Paulino Michelazzo da Fábrica Livre

Sadi Jacques da Associação SoftwareLivre.org – ASL.org

Gustavo Pacheco do projeto BROffice.

Alan Fachinni, fala sobre o Atelier de Hardware Livre. (E dança?)

Asimov, Isaac: The Gods Themselves

Tuesday, September 1st, 2009
Capinha feia, a que eu achei nem tinha capa =(

A que eu achei nem tinha capa =(

Li, gostei. A história é tão boa de se ler quanto as da série fundação. Tem muito mais alucinações nesse livro, a viagem vai longe. Tudo começa com plutonio-186 e muito ego.

O final não é grandioso assim como nos outros livros que li do asimov, (com excessão de Anéis de Saturno), mas o livro todo é excelente. Fiquei achando que faltou uma continuação da segunda parte do livro mas não vou estragar a surpresa. Leia que vale a pena.