Problemas com hospedagem do site e outras mudancinhas…
O meu antigo serviço de hospedagem1 (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 CPU2. 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:
- blog (feed)
- álbum de fotos
- pr0n (feed)
- tudumpa.com (e o instantregina)
- site d’Os Pereba©
- minha página de 1995
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!
- pra quem estiver curioso, era o TeHospedo. NÃO USEM, o contrato é leonino e o suporte coloca a culpa dos problemas no usuário!
- 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…
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).
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.
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.
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!
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:
- números abaixo de 20 tem nome próprio;
- de 21 a 99 os números são formados por DEZENA “e” UNIDADE (exemplo: “trinta e cinco”);
- dezenas redondas não tem nada depois (20 -> “vinte”, e não “vinte e zero”);
- 100 tem nome próprio: cem;
- números maiores que 100 são compostos por CENTENA “e” DEZENA ["e" UNIDADE];
- 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);
- os grupos são concatenados por vírgula;
- A ultima concatenação é feita por “e” (“um milhão e 200 mil”);
- 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”)
- 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);
- 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”).
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).
Curling
Seguindo a idéia desse cara aqui, decidimos treinar o Tomtom desde cedo no Curling:
Caralhos Alados
Hoje em dia fazem de tudo pras crianças brincarem, mas caralho de asa foi o primeiro que eu vi…
Eu não fiz isso!
Por sugestão do Bguno, mais um lolGPS…










