Homenagem a Benoît Mandelbrot

Benoît Mandelbrot
Benoît Mandelbrot

Um dos meus ídolos faleceu dia 14 (a notícia só chegou pra mim antes de ontem). Como homenagem a esse matemático brilhante que mudou minha vida em muitos aspectos, fiz um aplicativozinho pra android que desenha um conjunto de mandelbrot. Ainda não é lá grandes coisas, pretendo continuar desenvolvendo, mas já dá pro gasto. Quem quiser testar, tá aqui: Download do MandelbrotSet.apk

Quem quiser os fontes, estão no google code, aqui: android-mandelbrot-set no google code

MandelbrotSet
Captura de tela do aplicativo.

Problemas com hospedagem do site e outras mudancinhas…

O meu antigo serviço de hospedagem[foot]pra quem estiver curioso, era o TeHospedo. NÃO USEM, o contrato é leonino e o suporte coloca a culpa dos problemas no usuário![/foot] (onde eu mantinha o blog e outras coisas do meu site) queimou o filme comigo. O serviço começou a ficar lento, principalmente nos finais e semana a noite. Tinha vez de demorar 5 minutos pra carregar uma simples página. Reclamei uma vez, disseram que eu teria de mantar um ping, um traceroute e mais umas coisinhas. Reclamei de novo daí uma semana, dessa vez resolveram que a culpa era minha: meu site usava mais que os 1% de CPU estipulados em contrato (hein? 1% de CPU sem especificar qual CPU beira a ma fé, né gente?). Meu site não roda nada de mais. 2 wordpress e mais um ou outro CGI. Tirei tudo do ar, deixei só os blogs, e ainda assim limpei tudo, nenhum plugin. Mas claro que a culpa não era minha, a lentidão continuou e segundo eles eu continuava sendo o culpado, já que gastava mais de 1% de CPU. Isso porque logado na máquina via SSH eu podia ver que o uso de CPU não passava de 8% no total de TODOS os usuários. É CLARO que o problema não era CPU[foot]Na verdade o problema parecia de configuração do apache ou de algum proxy reverso que por acaso eles tivessem: A conexão era estabelecida dos dois lados, mas o processo do apache e do PHP não eram startados imediatamente; depois de alguns minutos o processo do apache e do php entravam e a página era carregada instantaneamente! Eu já vi isso uma vez quando tínhamos um valor de MaxClients muito baixo lá no trampo e o número de acessos no nosso site triplicou de um dia pro outro…[/foot]. Depois de uma longa troca de mensagens com o suporte, o técnico finalmente admitiu que eles estavam com problema de lentidão e que eu “não era o único” usando mais de 1% de CPU. Mas as ameaças de cancelamento da minha conta por quebra de contrato continuavam… E a lentidão também… Enfim, apelei e troquei de serviço de hospedagem. Mais rápido, mais barato e com um suporte que aparentemente sabe o que está fazendo. Azar deles que estão ganhando uma propaganda negativa (discreta, porque não sou tão mala assim).

Enfim, com o novo serviço de hospedagem, aproveitei pra mudar as coisas. No antigo era uma nhaca criar subdomínios ou domínios adicionais. Nunca funcionava direito e eu precisava abrir chamado toda vez… Agora funciona de cara! Então meu blog saiu do domínio principal (onde ainda tem um redirect por conta de links externos que eventualmente apontem pra cá), dei uma limpada na zona de redirects que era o tudumpá, e o blog de pron também ganhou domínio próprio. No final o domínio principal virou mais um depósito de tralhas (página dos pereba, site da época da faculdade, etc e tals). Em resumo, os sites do girino.org agora são:

Atualizem os links (apesar de ser desnecessário graças aos redirects), e lembrem-se NÃO USEM A TEHOSPEDO, eles são bobos feios e chatos!

UOL XMLify: Um plugin do wordpress para propagandas do UOL XML

(Para os preguiçosos, o plugin está aqui: UOL XMLify )

Quando criei um novo blog com conteúdo que feria a licença de uso do google ad-sense (i.e. tinha mulépelada), fiquei sem opção de propagandas para colocar nos feeds. No blog em si não tinha muito problema, pois vários programas de afiliados aceitam esse tipo de conteúdo e são facilmente embutíveis em blogs, mas os feeds são outra estória. A maioria dos programas de afiliados usa javascript ou flash de uma forma ou de outra, inviabilizando o uso dos banners em leitores de feed (leia-se: não funciona no google reader).

Exemplo de anuncios XML UOL
Exemplo de anuncios XML UOL

Por sorte o UOL tinha uma modalidade nova no seu programa de afiliados: UOL XML. Esta modalidade consiste em uma API XML padrão onde eu poderia acessar a lista de produtos oferecidos, ofertas, etc, e processar e formatar da forma como bem entendesse. Primeiro pensei em fazer uma “gambiarra” como tinha feito pra embutir os anuncios do submarino (que são apenas imagens com um link padronizado), mas a coisa ficava mais complexa pois era preciso acessar o UOL e baixar os XMLs, processá-los e só então embutir no feed.

Tela de administração do plugin
Tela de administração do plugin

Optei pelo caminho mais difícil: desenvolvi um plugin. Ele está ainda em processo de aprovação pelo pessoal do wordpress para ser hospedado por lá, mas já coloquei a primeira versão aqui: UOL XMLify: Um plugin do wordpress para propagandas do UOL XML

Testem, usem e comentem!

Um milhão, um mil e um ou um milhão mil e um?

Para os preguiçosos:

O projeto de que trato aqui é um conversor de números para sua representação “por extenso”. Se você chegou aqui e não quer ter o trabalho de ler, apenas achar o código, siga este link: código (ou acesso o projeto no google code). Se, por outro lado, estiver em busca de explicações para fazer o seu próprio conversor ou curioso sobre como este conversor aí em cima funciona, leia o resto deste post.

Ábaco

Para os curiosos:

O título é esquisito, mas a dúvida era essa. O problema surgiu quando, num dos relatórios do sistema, o cliente exigiu que os valores fossem escritos de forma numérica (fácil, o NumberFormat dá conta que é uma beleza) seguidos do valor por extenso. Pensei com meu botões: não tem problema, TODO MUNDO já precisou disso um dia, deve ter DÚZIAS de conversores para números por extenso vagando pelo labirinto de Falken. Basta escolher o mais bonitim e boas!

Na verdade a tarefa nem era minha. Caiu pra mim quando surgiu o primeiro bug. A classe que tinham usado funcionava bem, contanto que o número fosse redondo ou pequeno. “Um milhão de reais” ele disse quando pedi pra converter 1.000.000,00. Mas logo depois me cospe “Um milhão e três de reais” pra 1.000.003,00. Hein? Mas peraí, isso eu conserto, vá… Só que o próximo número piorou: “Um milhão e seiscentos e cinquenta mil e novecentos e dez reais”. Pera lá! Tem E demais aí!.

A primeira coisa que pensei foi em achar outro conversor. Doce ilusão. Existir até existem. Vários (ou melhor, várias cópias do mesmo, já que parecem ser todos baseados no mesmo código original). Mas nenhum funciona.

Quer dizer, funcionam… Se você usar os números de teste que o autor usou! (Quem gosta disso pode fazer disto um “caso” para test-driven design, ou o que valha). Saindo um pouco do que o autor tinha em mente, a coisa desanda.

Nesse ponto eu não tinha mais escolha: teria de implementar o meu próprio conversor. Bom, que os outros estavam errados eu sabia, mas e qual a forma correta de se escrever por extenso? Depois de muita discussão e nenhum acordo, decidimos: Vamos consultar uma gramática!Cheque

Na biblioteca, pegamos logo 3 gramáticas. Nenhuma, claro, concordava com a quantidade de “e” que o sujeito usou. Alias, nenhuma delas concordava entre si. Uma, a mais antiga, pregava o uso de vírgulas a torto e a direito:

um bilhão, cento e vinte milhões, duzentos e três mil, cento e quarenta e sete.

A outra era categórica: depois de mil não! Só depois dos “ãos” é que tem vírgula:

um bilhão, cento e vinte milhões, duzentos e três mil cento e quarenta e sete.

E por último, uma que se dizia de acordo com o novo acordo ortográfico (que não tratou nem de números nem de vírgulas, mas que de alguma forma afetava a opinião do autor a respeito) abominava vírgulas:

um bilhão cento e vinte milhões duzentos e três mil cento e quarenta e sete.

Assim fica difícil, né? Em nosso auxílio veio uma ótima e hiper didática revisora de texto que passava pelo local:

Vírgulas servem para separar os elementos numa lista. No caso dos números, use para separar cada grupo de unidade, milhar, milhão, etc. (nesse ponto a gente, das exatas, anota: uma vírgula a cada potência de 1000). Mas elas não são absolutas, e podem ser omitidas se for para aumentar a clareza. Pense na clareza do texto e escolha a forma que melhor lhe convém. Depois de escolhido o melhor jeito, procure uma gramática que concorde com você e use ela como bibliografia!

Pra mim, esse conselho foi genial. E de certa forma resolveu nosso problema: bastava escolher o mais fácil de implementar e depois procurar uma gramática que nos apoiasse.

Acabei me guiando por 8 regrinhas, que definiram como implementar meu conversor:

  1. números abaixo de 20 tem nome próprio;
  2. de 21 a 99 os números são formados por DEZENA “e” UNIDADE (exemplo: “trinta e cinco”);
  3. dezenas redondas não tem nada depois (20 -> “vinte”, e não “vinte e zero”);
  4. 100 tem nome próprio: cem;
  5. números maiores que 100 são compostos por CENTENA “e” DEZENA [“e” UNIDADE];
  6. acima de 1000 agrupa-se os números em blocos de 3 dígitos (potências de 1000), que são representados como se fossem números menores do que 1000 acrescidos do sufixo representando a potência de mil apropriada (mil, milhão, etc);
    1. os grupos são concatenados por vírgula;
    2. A ultima concatenação é feita por “e” (“um milhão e 200 mil”);
    3. A ultima concatenação é omitida (ou substituída por vírgula) caso o ultimo grupo seja maior que 100 e não seja múltiplo e 100 (“mil[,] duzentos e cinquenta”)
  7. o “um” em frente ao descritor de grupo “mil” é opcional e deve ser parametrizável (“mil e um” e “um mil e um” são igualmente aceitáveis);
  8. Ao acrescentar a unidade (por exemplo “reais”) usa-se o prefixo “de” antes da unidade caso o último sufixo seja de milhão ou maior (“dez milhões de reais”, mas “dez mil reais”).

Código

Com essas regras a implementação foi quase direta. Primeiro criei uma função para as unidades:


        String unidades(int n) {
                return UNIDADES[n];
        }

Em seguida as dezenas:


        String dezenas(int n) {
                if (n < UNIDADES.length) return unidades(n);
                int unidade = n % 10;
                n = n / 10;
                return DEZENAS[n] + " e " + unidades(unidade);
        }

depois tratei a exceção da regra 3:


        String dezenas(int n) {
                . . .
                String unidadeStr = "";
                if (unidade != 0) {
                        unidadeStr = " e " + unidades(unidade);
                }
                return DEZENAS[n] + unidadeStr;
        }

E seguindo as regras uma a uma cheguei no resultado final, que pode ser visto no google code. Ainda não está perfeito, e ainda quero brincar bastante com esse conversor, então deixem suas sugestões,seja aqui, seja como “bug” no google code, que eu implemento, caso dê tempo (e ânimo).

Canibais

Canibais: Paixão e morte na Rua do Arvoredo

Mais ou menos um ano atrás eu estava passeando por uma banca ou livraria, não lembro bem e vi uma seção de livros de bolso baratinhos. Como sempre, dei uma fuçada e além de um livro do Rousseau @ wikipedia.org (en) (Contrato Social @ wikipedia.org (en), que ainda estou pela metade) achei esse: Canibais, do David Coimbra.

Só que desde que comprei o meu netbook[foot]Por sinal, devo um post sobre o ubuntu 9.10 nele. Uma dica: VALE A PENA.[/foot], a leitura praticamente parou! Tentaram me convencer a usá-lo como leitor de e-book, mas é simplesmente impossível: assistir filmes é BEM mais fácil! Acho que assisti de tudo, desde filme de arte iraniano até comédia de Bollywood @ wikipedia.org (en) (ok, tentei ver um tal de All the Best, mas não dei conta de terminar! Novela das sete dá de 10 a zero naquilo em termos de roteiro!) Aí nesse final de ano os seriados de assistir no banheiro[foot]i.e. Two and a Half Men, How I met You Mother (que mereceria um post a parte talvez), The Big Bang Theory, South Park…[/foot] secaram, só voltam ano que vem, ou quem sabe, temporada que vem… A solução foi deixar o netbook de lado e voltar à leitura, em livros… de papel… árvores mortas… Primeiro, pra acostumar o cérebro, já meio enferrujado depois de tanto tempo, os quadrinhos, com o excelente Nova York, do Will Eisner. Depois, o que estava mais a mão: Canibais.

Bom, voltando a quando eu comprei… Conheci o David Coimbra numa dessas listas de discussão na internet. “Conheci”, na verdade, entre aspas. Ele nem deve saber quem eu sou 😀 Mas ele volta e meia mandava umas crônicas, e quem diz que não se fazem mais cronistas como antigamente, é porque não conhece o David Coimbra. Ou conhece, e sabe que mesmo antigamente não haviam cronistas como ele 😀

Eu nem sabia que ele escrevia romances, pra mim eram as crônicas no Zero Hora, vez ou outra encadernadas todas juntas, em forma de livros. Então quando bati o olho no livro, nem pensei, comprei logo. “Nem que seja pra mandar um trocado pro David Coimbra”, pensei, “em troca de todas as crônicas que ele mandava, de graça, no nosso email”. Se fosse ruim, não tinha importância, estava pagando pelo que já lera. Se fosse bom, eu estava no lucro.

E lucrei! Incrível, não sei como não me odeio por ter enrolado tanto pra ler! Desde minha tenra infância, apresentado aos romances históricos pelos Césares do Allan Massie[foot]ou talvez antes disso, com um romance que nunca mais vou lembrar de quem era, sobre um padre disfarçado em uma Cambridge medieval, investigando não-sei-mais que crime e que se depara com uma encarnação de cristo na forma de mulher, ou algo assim… Bem falando desse jeito parece um romance esotérico, e talvez fosse… eu era jovem e precisava do dinheiro…[/foot], depois as sagas do Cornwell, e por fim o belíssimo A Catedral do Mar. Então sempre passei meu tempo imaginando: qual seria o cenário ideal pra um romance histórico brasileiro? As bandeiras? O descobrimento? Ou seria lusitano demais?

David Coimbra achou o cenário ideal numa porto alegre do segundo império, com sua burguesia nascente, seus conflitos étnicos, seus personagens característicos (desde prostitutas a chefes de polícia), e também com seu crime mais famoso. É nesse cenário que David Coimbra colocou um trio de amigos: um sapateiro introspecto, quase intelectual, um padeiro gorducho e bonachão, e um anspeçada @ wikipedia.org (pt)[foot]também tive de recorrer ao labirinto de falken pra saber exatamente o que era…[/foot] boa vida com seu cão. Em torno desse trio, toda porto alegre oitocentista circula para desvendar um crime que chocou e envergonhou a cidade. Um crime que fez de todos (ou quase todos) os porto alegrenses, Canibais.

Nova Habitante aqui de casa (e do blog)

Como todos sabem, um girino sem um cão é como um peixe sem bicicleta[foot]tentei achar o autor dessa frase, aparentemente era “A Woman without a man is like a fish without a bicycle“, atribuída à feminista americana Gloria Steinem, mas derivada de um “grafiti” novaiorquino (fonte)[/foot]! Então depois de matutar muito (i.e. eu sempre quis isso, mas nunca tive coragem de dizer  em voz alta) decidi que meu novo cão seria um Scottish Terrier @ wikipedia.org (en). A idéia era ao mesmo tempo ter um cão com temperamento similar ao do westie @ wikipedia.org (en) (and hence, da Lilica), sem ao mesmo tempo lembrar ela demais. O scottish, tirando quando é branco, é preto (ou brindle @ wikipedia.org (en), mas vá lá, semi-preto)! Além da vantagem evidente no sistema de cotas raciais (sim, foi uma péssima piada racista)[foot]Depois comento se essa técnica de aumentar a visibilidade do blog funcionou![/foot], não corro o risco de olhar pra ela e ver a outra.

De repente aconteceu! No início do mês, descobrimos uma ninhada que já estava com quase 2 meses e ainda tinha uma filhotinha à venda! Corri atrás, telefonei, negociei, fui visitar e, ontem, finalmente trouxe pra casa esse bebezinho lindo que é a Lótus:

Lótus ainda com cara de perdida
Lótus ainda com cara de perdida

Por enquanto, no segundo dia de Lótus em casa, a coisa vai bem: ela faz xixi na cozinha e cocô no banheiro (no social, o dela ela nem tocou). Tem comido direito, brinca super bem com a Anita e só chorou de noite quando fez xixi, pra me chamar pra limpar (ô vida de pai, daqui a pouco é o tomás gritando: “Paiê, acabei, vem me limpar!”). Alias, o Tomtom também gostou dela! Pegou o focinho dela e tentou por na boca! Ela, claro, mais rápida que ele, escapou rapidinho e começou a lamber os pézinhos dele e puxar as roupinhas. Como estava migrando meus antigos álbuns de fotos do GPA, que parou de funcionar por excesso de velhice (usa bibliotecas perl que não vem mais na instalação default do meu provedor e que fiquei com preguiça de solicitar) pra uma plataforma nova, aproveitei e criei um álbum de fotos novo pra ela.

Se preparem! A Lótus agora vai ser nova habitante aqui de casa e novo instrumento de tortura dos leitores (minha mãe e aquele cara que eu pago pra ler e comentar) desse blog!

Falcão visita Raul Gil e pede encontro com mulheres

Deu no estadão de hoje[foot]É CLARO que é piada, né? O Link original pra notícia do estadão: http://www.estadao.com.br/noticias/internacional,kadafi-chega-a-roma-em-visita-cercada-de-polemica,385316,0.htm[/foot]:

LIMEIRA – O presidente líbio Falcão, famoso por suas músicas irreverentes como “I’m not a dog no”, “Black people car” e “Um Bodegueiro Na Fiec” (Eu sou VIP), chegou a Limeira nesta quarta-feira, 10, em sua primeira visita à São Paulo desde que assumiu o governo por golpe musical, há 40 anos. O líder líbio também requisitou um encontro com mulheres italianas proeminentes nos campos dos negócios, da política e da cultura. Ele deverá fazer uma palestra para 700 mulheres na sala de concertos de Roma. Sua noiva, Preta Gil fez careta quando ouviu!

Raul Gil recebe o Famoso astro internacional Falcão, que cantará em seu programa do final de semana sucessos como "I'm not a dog no", "Black people car" e "Um Bodegueiro Na Fiec" (Eu sou VIP). Seu pedido irreverente de um encontro com mulheres italianas deixou sua noiva, Preta Gil, de cara amarrada.


Homenagem à Lilica

Tomtom, Vaquinha eu e lilica
Tomtom, Vaquinha eu e lilica

Ainda tou abalado demais pra escrever qualquer coisa. Essa foi a ultima foto da Lilica antes dela nos deixar. Foram 3 maravilhosos anos na companhia dela que acabaram de forma trágica e repentina 🙁 Já nem sei como vou dormir a noite sem ter ela atrás do meu travesseiro, como colocar o Tomtom pra dormir sem ela do meu lado, esquentando minhas pernas. Que motivo vou ter pra passear? Sair de casa? Caminhar? Foram só 3 anos e eu já não sei como viver sem ela. Minha única alegria é saber que ela foi um cachorro feliz!

Tchau Lilica, você mudou minha vida pra melhor e merece todas as homenagens do mundo!

Blog do girino

%d bloggers like this: