Arquivos Mensais: fevereiro 2009

Criando e aplicando um patch

Não vou entrar em muitos detalhes nesse artigo, mas vou dar uma explicação rápida de como funcionam os programas diff e seu companheiro, o patch. O primeiro cria o patch e o segundo o aplica em algum arquivo.

“Mas WTF é um patch? E por que eu iria querer usá-lo?” Um patch é um arquivo que diz que partes de um outro arquivo devem ser modificadas*. Ele é bastante útil, por exemplo, quando você modificou um arquivo de 2000 linhas e quer dizer para o desenvolvedor do aplicativo que acha que essa sua versão é melhor. A vantagem é que o patch é bem menor que o arquivo original, e isso permite que o desenvolvedor veja com maior facilidade o que foi alterado e o que não foi.

Saiba mais

Publicidade

Notas sobre optimizações

Em um artigo que eu logo escreverei, eu mostrei um programa que lê configurações de um arquivo de texto (Nota mental: André, pare de viajar no tempo que seus artigos estão ficando mais confusos que de costume).

A idéia é bem simples, um struct com dois char*s: o nome da variável e o valor dela, mas como organizar isso? Um array eu descartei logo de início, (mas escrever isso me deixou curioso com como ele se comportaria), sobravam listas e árvores binárias.

Saiba mais

Fatorando números: Algoritmo de Fermat

Esses dias estive à procura de um método melhor para fatorar números que aquele, em pseudo-código:

for(i=2; i<sqrt(numero); i++)
    while(numero % i == 0)
        numero = numero / i
        append(fatores, i)

e encontrei o algoritmo de fermat, que se basea no princípio de que se pode escrever qualquer número ímpar e positivo na forma (r – s)(r + s). Lembrando que esse é um caso de produto notável, em que (r – s)(r + s) = r² – s², temos:
1² – 0² = 1
2² – 1² = 3
3² – 2² = 5

Depois nós efetuamos a soma e a subtração e fatoramos o resultado delas.

O algoritmo em si é:

  • Dividimos n por 2 até que ele vire um número ímpar (e adicionamos 2 à lista de fatores).
  • Definimos o intervalo em que vamos procurar a resposta, tal que \sqrt{n} \le r < \frac{n+1}{2} .
  • Para cada valor de r:
    • m = r^2 - n
    • Se m for maior que zero e tiver raiz exata, s = \sqrt{m} . Então, fatoramos (r – s) e (r + s).
  • Se chegarmos ao maior número que r pode ser sem que achemos (r – s) e (r + s), então n é um número primo e o adicionamos à lista de fatores.

A parte matemática é essa. Clique para ver o resto do artigo se quiser ver uma implementação em Python, uma em C e uma em Lisp.

Em Lisp vou ficar devendo por enquanto; o código atual funciona apenas no CLISP, e não no SBCL/CMUCL que são muito mais rápidos. Eu já sei o motivo, preciso achar um jeito de contornar o problema. É provável que eu aproveite e refaça parte do código.

Saiba mais

Flame wars… the punishment due

Vejam o recente artigo do Cardoso no MeioBit sobre a performance do Firefox no Linux. Eu concordo com ele que fanboys enchem o saco, sejam do Linux, sejam da Apple, sejam da barraquinha de cachorro-quente da esquina; mas isso não justifica esse sensacionalismo todo.

É um aplicativo que roda mais devagar que no Windows, isso não significa que todos aplicativos rodem mais devagar. Não consigo entender todo esse prazer que o Cardoso sente em “detonar” o Linux.

Eu sei que em termos de número de visitantes, eu sou um blogueiro insignificante perto dele, mas eu não responderia “mimimimimi” a alguém que tenha comentado no meu blog criticando meu artigo, e eu sei que um a menos não vai fazer diferença, mas eu não leio o que um faboy escreve, nem o que um anti-fanboy o faz.

Vida nova na guerra entre navegadores (no Linux)

Enquanto no Windows surgiram novidades como o Safari e o Chrome, no Linux as coisas continuaram mais ou menos como antes. Embora o Firefox 3 seja melhor que o 2 em termos de consumo de memória, ele ainda é mais pesado que alguns usuários gostariam. Com o uso do tracemonkey a partir da versão 3.1 beta, ele ganha agilidade, mas continua lento para iniciar e com o uso abusivo de memória.

A outra opção, o Opera, não se integra tão bem ao ambiente. Ainda não existem versões compiladas com o Qt4 para Linux sem ser com bibliotecas estáticas, e mesmo essas versões, o usuário tem de fuçar pelo FTP da empresa para achar. Além disso, tenho problemas ao copiar texto com acentos de um outro programa para ele.

Existem outras opções menores, como usar o IE pelo wine (eu sei, eu sei, ninguém faria uma coisa dessas; exceto webdesigners que precisam testar seu produto), o Epiphany do GNOME e o Konqueror do KDE. O Epiphany usa a mesma engine que o Firefox, mas não tem suporte às mesmas extennsões que o Firefox (embora tenha sim suporte a algumas), e o Konqueror parece não ter muitos fãs.

Porém, graças ao desenvolvimento da engine Webkit, estão começando a surgir novos browsers. O próprio Epiphany possui uma versão de testes usando essa engine, existe também o Arora, em Qt, e o Midori, em GTK, que inclusive foi “apadrinhado” pelo XFCE.

Essa engine surgiu como um fork() do KHTML do Konqueror e o browser de maior destaque a usá-la é o Safari da Apple.

Estou escrevendo este artigo do Midori e ele está cada vez melhor. Em dezembro, se eu abria muitas abas ele travava, mas agora já não há mais problemas ao fazer isso. Ainda existem problemas com o Flash em algumas páginas mais carregadas, mas o desenvolvimento tem sido rápido.

Outra novidade que nos aguarda é o próprio Chrome do Google, que, para minha felicidade pelo menos, usará GTK.

Só para despedir com um meme, parece que 2009 finalmente será o ano do Linux no Desktop. :P

Haiku ou BeOS: Reloaded

Estava sem nada para fazer hoje, então instalei o virtualbox aqui e rodei um vm do Haiku, aquele projeto opensource que procura ser compatí­vel com o BeOS.

Considerando que eu estava rodando numa máquina virtual e que o meu PC não é lá muuuito rápido, ele dá boot rápido, mas é meio como Windows: aparece a tela, mas ainda tens de esperar carregar os í­cones e tra-lá-lá. Infelizmente o nightly-build que eu peguei deve estar com algum problema (r29155) e não consegui executar nenhum aplicativo. A versão pre-alpha vem já com alguns softwares instalados: um terminal, o firefox, um leitor de pdf, um editor de textos simples, etc, mas não posso opinar sobre eles.

Não achei ele nada demais. Claro que estou criando um anacronismo comparando o BeOS com os SOs de hoje, com suporte a multi-user, por exemplo; mas se o Haiku quiser deixar de ser só uma cópia do BeOS, seria bom que após seu lançamento oficial, seus desenvolvedores continuassem a melhorá-lo. Se não for assim, o Haiku será apenas um brinquedo para os saudosistas.