As mulheres, os militares e as mulheres militares.

Female flag officers honor first woman four-star
No meu ultimo post decente deixei no ar a pseudo-conclusão de que mulheres ganhariam menos que homens no serviço público federal. ("pseudo", porque não tenho dados concretos pra embasar, e sim uma intuição a partir de dados preliminares). Depois fui cuidar de fazer tabelinhas bonitinhas com os dados pra postar no blog de novo, como quem não quer nada, achando que tudo continuaria como está. Baixei os dados no novo formato, fiz um novo programinha para calcular as estatísticas (dessa vez offline, postando os resultados já consolidados, vou tentar falar sobre ele depois).

Agora tinha dados pra maio e junho! ótimo! dá pra comparar os meses e ver o que mudou. Calculei os valores pra junho, tudo como esperado. Só pra conferir então, calculei os valores pra maio e... hein? caixa escrito frágil? Não tinha NADA a ver! Os Ricardos tinham sido desbancados pelas REGINAS! (pensado pelo lado bom, continuou na letra R). Recalculei, afinal no primeiro post usei os 100 mais comuns, agora eram os 200. Necas! Reginas batiam um bolão! Mas que diabos? Minhas contas antigas estariam erradas? Mas ai os valores de junho tinham de ser diferentes. Não, alguma coisa nos dados tinha mudado, e eu precisava saber o que!

NOME QUANTIDADE MEDIA
REGINA 1769 R$ 7.290,96
LUCIA 1634 R$ 7.253,19
DENISE 1397 R$ 7.095,79
SILVIA 1309 R$ 7.015,82
ELIZABETH 905 R$ 7.013,96
CRISTINA 959 R$ 6.979,49
CELIA 874 R$ 6.935,12
SERGIO 5330 R$ 6.900,84
ROSA 901 R$ 6.892,27
CELSO 1310 R$ 6.869,84
Maiores médias salariais por nome

A dica veio quando ao testar os javascripts de reordenar as tabelas, ordenei por "quantidade de servidores" a tabela dos órgãos. E os vencedores de sempre, ministério da saúde e INSS tinham pulado, em maio, pra 3º e 4º lugar. E na frente de tudo vinham os calouros Comandos do Exército, da Marinha e da Aeronáutica. Fiquei pasmo! Será? Será que os MILITARES, aqueles geralmente considerados retrógrados, conservadores, apegados a rigidez hierárquica e sobretudo MACHISTAS eram os responsáveis por colocar as mulheres no TOPO da lista? Será que nas forças armadas as mulheres ganhavam TÃO mais assim? Não é possível... Rápido, um select aqui, um order by ali e... PASMÉN!

SIM! As mulheres ganham, em média, mais que os homens entre os militares!

(só pra constar que essa é uma pseudo conclusão também, já que não tenho informação de sexo, só de nome, e não fiz uma pesquisa exaustiva, mas apenas entre os nomes mais comuns). Essa foi a segunda coisa mais contra intuitiva que eu ja tinha visto em toda minha vida, perdendo só pra Rua do Amendoim!

NOME QUANTIDADE MEDIA
MARIA 438 R$ 6.141,24
LUCIANA 300 R$ 5.716,87
ANA 830 R$ 5.390,72
ADRIANA 254 R$ 5.300,57
RENATA 386 R$ 5.275,04
PATRICIA 347 R$ 5.249,83
FERNANDA 358 R$ 5.010,69
JULIANA 375 R$ 4.748,59
MARCO 1335 R$ 4.664,48
SERGIO 1838 R$ 4.572,13
Maiores salários médios entre os militares

Minha cabeça já estava de ponta cabeça. Mas peraí! Os maiores salários das militares não são das Reginas, muito menos das Lúcias, Denises e Sílvias. Tudo bem as Militares ganharem mais, mas não são elas que colocaram as Reginas na frente! Tem mais alguma coisa acontecendo! E eu acho que sei o que é: eu nunca vi uma soldada!

Sério, conheço mulheres tenentes, capitãs, majores e até coroneis (coronelas?), mas nunca vi uma soldada! E menos ainda uma recruta: não existe serviço militar obrigatório para mulheres! Agora sim a coisa começa a fazer sentido. Fui conferir e.. os Ricardos que ganhavam altos R$ 8.329,88 na primeira leva dos dados, agora ganham "míseros" R$ 6.463,87. Já as Camilas pouco mudaram, de R$ 4.270,70 pra R$ 4.303,93. A ficha caiu. As forças armadas não puxam pra cima o salário feminino. Puxam pra baixo o masculino.

Tudo bem, o exército puxa pra baixo o salário dos homens por causa de recrutas e soldados. Vá lá, mas as mulheres continuam ganhando mais que os homens! Os números não mentem. É verdade, não mentem. Mas metade dos números só diz meia verdade. E a verdade verdadeira só vai aparecer quando se compara entre iguais. Mais selects, mais order bys e voilà. Meu senso comum restaurado, firme e forte: Entre os oficiais militares, quem ganha mais são os Walters. As Ritas, melhores colocadas entre as oficialas, só aparecem bem longe, na 94ª posição. E quando falamos de número de pessoas a coisa também não fica bem pras Marias (ou pras Anas, que é o nome mais comum entre as mulheres militares). Pra 1053 josés, o nome mais comum, temos apenas 411 anas (ou 264 marias).

ORDEM NOME QUANTIDADE MEDIA
1 WALTER 45 R$ 10.612,44
2 GERSON 47 R$ 10.133,28
3 ALVARO 82 R$ 10.036,26
4 ORLANDO 31 R$ 9.970,77
5 MARCO 282 R$ 9.931,24
6 SERGIO 373 R$ 9.898,51
7 CLAUDIO 304 R$ 9.895,78
8 WILSON 60 R$ 9.891,97
9 MAURO 122 R$ 9.860,34
10 NILSON 37 R$ 9.848,68
. . .
95 RITA 30 R$ 8.395,57
Maiores médias salariais entre oficiais

É, caiu por terra toda a esperança de feminismo militar. Na pratica, são poucas mulheres e apenas em em áreas de nicho. E elas só ganham mais, na média, do que os homens, porque não tem acesso aos cargos mais baixos. Quando a comparação é entre iguais, elas continuam no prejuízo.

O jeito é correr pras universidades, onde ainda impera um espirito progressista. Por lá, as Veras ganham dos Sebastiões, e as Reginas, Lúcias e Sônias disputam uma vaga nas quartas de finais.

NOME QUANTIDADE MEDIA
VERA 162 R$ 11.058,40
SEBASTIAO 85 R$ 10.679,09
NELSON 118 R$ 10.518,53
VICENTE 56 R$ 10.410,07
REGINA 186 R$ 10.302,47
ARMANDO 63 R$ 10.272,78
LUCIA 203 R$ 10.096,62
SONIA 222 R$ 10.046,67
WILSON 103 R$ 10.022,98
ALFREDO 66 R$ 9.954,97
Maiores médias salariais entre Prof. Universitários

Transparencia navegável

Coloquei no ar uma página em javascript que permite navegar pelos dados pré-processados do portal da transparência. A primeira tentativa tinha siso um sistema que calculasse as estatisticas em tempo real, mas não deu certo. Dado demais, o sistema não dava conta. Então o que eu fiz foi pré-processar os dados e publica-los em formato json. As paginas usam javascript para carregar esses dados e exibir de forma bonitinha. Links:

Essa separação entre militares e não militares tem dois motivos: os salários dos militares só estão disponíveis par ao mes de maio, e os dados divulgados no post anterior foram colhidos antes dos salários dos militares serem incluidos no portal da transparência. Os dados dos militares tem algumas peculiaridades que eu gostaria de discutir em outro post, como por exemplo o fato de as mulheres ganharem mais do que os homens, contrastando com o que ocorre entre os servidores civis.

Quem quiser os fontes dos programas usados para gerar as páginas, está no mesmo projeto do google code, em outro branch. (Versão atualizada)

Update:

Editei os links para  a versão nova do programinha.

Fuçando a transparência

 

Acordando o blog depois de anos parado, o assunto de hoje é: Transparência.

O Governo Federal lançou recentemente no seu Portal da Transparência, um sistema que permite a consulta dos salários de todos os servidores. Polêmicas a parte (eu acho que os dados poderiam ser facilmente anonimizados, solucionando 90% dos pontos polêmicos e sem atrapalhar em nada), a ferramenta é bem pobrinha. Dá pra consultar servidor por servidor o quanto ele ganha. Tirando a curiosidade sobre autoridades específicas (presidente, ministros, etc), não serve pra absolutamente NADA! (Serve pra saber pra qual parente você vai pedir dinheiro emprestado e de qual parente você deve fugir pra não ter de emprestar, mas isso não tem PN a ver com transparência.). Do ponto de vista de transparência e utilidade pública, o portal deveria ter formas de se manipular e agrupar os dados, procurando padrões estranhos, anomalias, etc. Pra isso, ele não serve. Aí entra a fuçação (sic?)!

Baixar pra ter em mãos

Pra fuçar, é preciso ter os dados em mãos. Poder manipular, transformar, jogar pra cima, apertar, chamar de meu amor e tudo mais! Meu primeiro passo então nessa briga, foi de como obter esses dados. O site permite o download de uma parcela desses dados, basta clicar no link "baixar mais dados" logo acima da lista de nomes logo na primeira tela:
link de download do arquivo de servidoresSó que esse arquivo não inclui o mais importante, que são os valores, os salários propriamente ditos. Inclui somente os dados de lotação do servidor (órgão, cargo, funções ocupadas, etc). Isso, sozinho, não serve pra quase nada (só pra contar quantas pessoas tem em cada órgão, porcentagens de funções gratificadas, e umas coisinhas interessantes que eu vou colocar mais em baixo). Eu ainda precisava da outra metade dos dados, que não existem em arquivinho pronto pra baixar. Aí a começa a fuçação.

Com cuspe, com jeito e um pouquinho de wget

Os dados de salário ficam em uma página separada. Pra chegar nela, preciso clicar no nome da pessoa, abrindo assim a tela com os cargos que ela ocupa, depois clicar novamente no botão de Remuneraçãoe finalmente abre-se uma tela com os valores de salário, descontos, rendimentos eventuais, etc. Baixar uma por uma as quase 700 mil páginas não era comigo.

A primeira coisa que fiz foi tentar identificar um jeito de automatizar isso. Notei que na URL havia sempre um campo numérico do tipo: IdServidor=XXXXXXX. Opa, bom demais. Isso provavelmente é a chave desses registros no banco de dados, e deve ser um valor seqüencial. Fiz alguns testes e cheguei a conclusão que dava pra fazer! Dava pra baixar tudo usando esse ID. Só que esse "IdServidor" não aparecia no arquivo baixado. Eu ia ter de improvisar pra saber quais eram os valores válidos pra ele. Busca binária, descobri o primeiro valor em 1000000 e o ultimo em 1691091 [foot]parece que esse valor andou crescendo de lá pra cá, então vou ter de conferir e baixar tudo de novo[/foot]. Agora era só baixar usando wget:

 for ((i=1000000;i<1691092;i++))
     do wget 'http://www.portaltransparencia.gov.br/servidores/Servidor-DetalhaRemuneracao.asp?Op=1&IdServidor='${i} -O salario.${i}.html -o /dev/null &
     if [ $((i%100)) -eq 0 ]
         then echo "echo waiting for $i"
         wait;
     fi
 done

(note que eu rodo 100 processos em background pra aumentar o nível de paralelismo. na época o site estava bem lento, então foi necessário fazer isso. Agora já não sei como está e pode não ser a forma ideal).

Pronto, os dados estavam todos ali. Agora só precisava "extrair" eles dos htmls e transformar em algo mais processável.

e PERL, não se esqueça do PERL...

Pois é.. e toca analisar os htmls pra ver como os dados estão estruturados ali e depois fazer um parser, quanto mais meia boca melhor, afinal é PERL, pra cuspir esses dados em formato "de gente". No caso, "de gente" era um CSV. O programinha em perl pra processar essa galerinha aí foi esse aqui ó: parse.pl. Nada de mais. Só espera pelas coisas certas nos lugares certos. Eu acabei optando por ignorar uma série de coisas como 13, férias, jetons, etc, e me ative só ao "importante": salário bruto, "Abate Teto", imposto, previdência e o salário líquido. Na verdade nem o líquido eu acho útil, já que ele inclui férias ou 13 de um monte de gente. Qualquer conta feita pelo líquido fica distorcida por causa desses pagamentos eventuais. No fundo, eu sempre olho pelo salário bruto menos o abate do teto (estritamente falando, é "mais", porque já vem negativo) que é a conta que melhor dá uma idéia da situação das coisas.

 E pra juntar tudo?

Pois é... E pra juntar tudo? Agora tava na hora, eu tinha descobrir um jeito. Mas pra começar eu achei que colocando tudo num banco de dados ficaria mais fácil de achar um jeito de casar um arquivo com o outro. Foi mais fácil que eu pensava. O Mysql importa de arquivo csv. Criei toscamente as tabelas com todos os campos varchar(255), importei e fui fuçar. A primeira coisa que tentei foi pelo nome.  SELECT nome, COUNT(*) FROM salario GROUP BY nome HAVING COUNT(*) > 1 me deu uma péssima surpresa... cheio de gente com nome igual... Mas o CPF deles era diferente... Será? bora então!  SELECT nome, cpf, COUNT(*) FROM salario GROUP BY nome, cpf HAVING COUNT(*) > 1.

BINGO!

Nenhuma repetição! Usando o CPF mais o nome eu consigo identificar unicamente todos os servidores, e consigo "casar" uma tabela com a outra. Acrescentei logo um campo "id_servidor" na tabela de servidores e preenchi:  UPDATE servidor SET id_servidor = (SELECT id_servidor FROM salario WHERE salario.cpf = servidor.cpf AND salario.nome = servidor.nome);. Voilá! Temos as duas tabelas relacionadas e podemos brincar de fuçar!

Fuçar na mão, também não né?

Fiz um monte de queries, pensei num monte de coisas, mas a coisa tava começando a ficar chata e repetitiva. Resolvi sistematizar isso tudo num programinha. Como surgiu uma discussão sobre grails com uma galera na mesma semana, o povo querendo saber se valia a pena usar em produção, etc, resolvi fazer em grails uma aplicaçãozinha de fuçar os dados. Minha idéia seria que facilitaria minha vida usar hql/hibernate ao invés de SQL puro.

Ledo engano!

Hibernate e HQL se mostraram lentos demais pro que eu queria fazer. É muito dado, muita manipulação de conjuntos grandes. Muito group by, inner queries, etc. Enfim, não rolou. Acabei fazendo tudo em SQL e usando o grails só mesmo como plataforma pra jogar os dados na web de forma bonitinha. No final, joguei tudo pra dentro do grails mesmo. A importação dos CSVs, a validação dos dados, a denormalização (que eu não tinha feito quando era só no sql), e ainda fiz um passo extra de tokenização dos nomes, que vai ser útil mais pra frente. O fonte dele está disponível no google code. Basta rodar com "grails run-app" dentro da raiz dele e ele já te manda pra tela de carga dos dados no primeiro acesso. Daqui pra frente ignorem meu banco original descrito lá pra cima. Vamos usar o banco gerado pela aplicação grails, beleza?

O que eu achei?

Pouca coisa interessante saiu no começo. A pior delas foi descobrir que fiz besteira! O banco central é o órgão que, na média, melhor paga no governo federal (mentira, não tem os dados do legislativo e TCU ou senado provavelmente pagam ainda melhor). Tivesse continuado por lá, tava rico: a média salarial por lá é de R$ 16.734,28. Bem a frente da AGU e da CGU que são os próximos "grandes" na lista. Uma tabelinha abaixo com os 20 primeiros. Destaque pros que tem gente suficiente pra média ser significativa:

Órgão de Lotação Qtd. Média
EMPRESA BRAS. DE SERVICOS HOSPITALARES 2 R$ 26.723,14
CENTRO NAC.TECNO.ELETRONICA AVANCADA S.A 8 R$ 20.146,68
EMPRESA DE PESQUISA ENERGETICA 9 R$ 17.147,72
BANCO CENTRAL DO BRASIL 4483 R$ 16.734,28
EMPRESA DE TRENS URBANOS DE PORTO ALEGRE 12 R$ 15.310,35
NUCLEBRAS EQUIPAMENTOS PESADOS 10 R$ 15.108,61
ADVOCACIA-GERAL DA UNIAO 7547 R$ 15.093,39
CONTROLADORIA-GERAL DA UNIAO 2343 R$ 14.247,21
INSTITUTO DE PESQUISA ECONOMICA APLICADA 564 R$ 14.184,95
SUPERINTENDENCIA DE SEGUROS PRIVADOS 422 R$ 13.678,70
MINISTERIO DA FAZENDA 32606 R$ 12.487,78
AGENCIA NACIONAL DE AGUAS 328 R$ 12.379,99
COMISSAO DE VALORES MOBILIARIOS 564 R$ 12.355,82
AGENCIA NAC PETROLEO GAS NAT BIOCOMBUSTI 686 R$ 11.296,41
GOVERNO DO ESTADO DA BAHIA 1 R$ 11.179,36
MINISTERIO DAS RELACOES EXTERIORES 1549 R$ 11.119,07
EMPRESA BRASILEIRA DE PESQ. AGROPECUARIA 86 R$ 11.035,41
AGENCIA NACIONAL DE VIGILANCIA SANITARIA 1937 R$ 10.944,00
AGENCIA NACIONAL DE SAUDE SUPLEMENTAR 599 R$ 10.823,87
AGENCIA NAC. DE TRANSPORTES AQUAVIARIOS 331 R$ 10.773,54

Mas aí entra um probleminha: a Receita Federal nem aparece. São todos lotados como "Ministério da Fazenda", (o que está certo, já que ela não é um órgão independente, mas uma secretaria do ministério). Dá pra ter uma idéia melhor de quem recebe mais pegando a descrição dos cargos:

Posição Nome Qtd. Média
1 PRESIDENTE DO BANCO CENTRAL 1 R$ 26.723,13
2 PRESIDENTA DA REPUBLICA 1 R$ 26.723,13
4 DIRETOR SERVIDOR DO BANCO CENTRAL 4 R$ 26.376,98
7 MINISTRO DE PRIMEIRA CLASSE 56 R$ 23.849,09
8 MINISTRO DE ESTADO 28 R$ 23.007,40
10 MINISTRO DE SEGUNDA CLASSE 92 R$ 21.803,78
12 DELEGADO DE POLICIA CIVIL ESPECIAL 16 R$ 21.165,92
13 DELEGADO DE POL FEDERAL CLASSE ESPECIAL 400 R$ 20.923,64
14 TEC DE PLANEJ E PESQUISA-QUADRO SUPLEMEN 15 R$ 20.709,22
17 PERITO CRIMINAL FEDERAL CLASSE ESPECIAL 161 R$ 20.121,84
19 AUDITOR-FISCAL DA RECEITA FEDERAL BRASIL 11556 R$ 19.581,05
21 CONSELHEIRO 109 R$ 19.460,44
24 TECNICO DE PLANEJAMENTO 70 R$ 19.171,38
28 AUDITOR FISCAL DO TRABALHO 2992 R$ 18.763,84
29 ADVOGADO DA UNIAO 1664 R$ 18.648,99
32 ANALISTA DO BANCO CENTRAL 3604 R$ 18.437,51
34 PROCURADOR DO BANCO CENTRAL 197 R$ 18.286,05
35 PROCURADOR FEDERAL 4023 R$ 18.126,87
37 PROCURADOR DA FAZENDA 1973 R$ 18.096,88
38 TECNICO DE PLANEJAMENTO E PESQUISA 241 R$ 17.943,75

Inclui uma coluna de "posição" porque eu tive de cortar um monte de cargos com poucas pessoas (uma ou duas na maioria das vezes) que não fazem muito sentido nesse contexto. Aí da pra ver que a galera do Banco Central ainda perde pra galera da Receita Federal, apesar de tar lá bem pertinho.

Uma coisa interessante de notar nessa tabela são os "ministros de estado", que em princípio ganham o mesmo que o presidente da república ou o presidente do BC, mas que ali estão bem pra baixo. Fuçando um pouco a gente descobre que vários deles recebem R$ 0,00 pois atingem o teto com as remunerações originais deles (do legislativo ou de outras esferas de poder) que não aparecem na lista. E tem o Brizola Neto, que tomou posse durante o mês de maio e não recebeu o valor integral por isso.

Mas por enquanto é só fatos curiosos. Não tem nada de realmente interessante. Foi quando eu resolvi entrar pra numerologia e descobrir

Qual o significado do seu nome?

Pois é, quais nomes (ou sobrenomes) fazem as pessoas ganharem mais? Como eu fiz a tokenização dos nomes, dá pra agrupar por eles e descobrir. E aqui vai uma dica: se quiser que seu filho se dê bem no funcionalismo público, chame ele de Ricardo! (E nunca, mas nunca mesmo, chame sua filha de Camila). Na verdade, eu filtrei os 100 nomes mais comuns e peguei os maiores e menores salários médios entre eles:

Nome Qtd Média
RICARDO 3557 R$ 8.334,13
EDUARDO 3156 R$ 8.187,19
MAURICIO 1371 R$ 8.119,83
MAURO 1186 R$ 8.109,96
SERGIO 3523 R$ 8.090,30
CELSO 926 R$ 8.034,11
MARCO 1860 R$ 7.983,56
ALEXANDRE 2922 R$ 7.977,80
MARIO 1859 R$ 7.976,97
FLAVIO 1527 R$ 7.942,51

Comparando com os nomes mais comuns, que ficam perto da média geral:

Nome Qtd Média
MARIA 31476 R$ 6.324,43
JOSE 23187 R$ 6.740,67
ANTONIO 10156 R$ 6.789,10
ANA 9116 R$ 6.370,80
CARLOS 8715 R$ 7.432,78
PAULO 8462 R$ 7.608,24
JOAO 8382 R$ 6.782,20
LUIZ 7963 R$ 7.536,28
FRANCISCO 7538 R$ 6.403,44
MARCELO 4283 R$ 7.933,07

Dá pra se ver a importância de ser Ricardo! São quase R$ 2.000,00 a mais. E pra camila então, nem se fala:

Nome Qtd Média
CAMILA 761 R$ 4.268,22
DIEGO 682 R$ 4.606,43
PRISCILA 597 R$ 4.743,88
RAIMUNDA 602 R$ 4.851,35
ALINE 1288 R$ 4.937,33
ANDREIA 630 R$ 5.044,09
VANESSA 956 R$ 5.080,88
THIAGO 1245 R$ 5.088,57
FRANCISCA 1297 R$ 5.152,34
THAIS 501 R$ 5.202,00

Um Ricardo vale quase o dobro de uma Camila!

(Eu não sei explicar esses fenômenos, mas a predominância masculina no topo e feminina na base dão uma idéia de que sexo deve ter influencia no salário. Outro fator que parece relevante é a época em que o nome esteve na moda. Ricardos tendem a ser mais velhos que Camilas, o que os coloca em patamares maiores nos planos de carreira. Ainda devem ter outros fatores extra-numerologia pra explicar, quem tiver palpites verificáveis, poste nos comentários)

E o que falta?

Bom, isso tudo foi diversão. Falta encontrar algo de sério nisso tudo. Pra isso eu queria fazer um data-mining mais sério nos dados, mas me falta experiência. Tentei montar um BI no pentaho com os dados, mas ainda estou apanhando pra modelar bem esses dados. Principalmente o fato de ter várias pessoas com mais de um cargo me deixa sem saber como isso se modela num DW.

Num data-mining "manual" andei descobrindo uns padrões interessantes: Quando agrupo as pessoas por órgão e por nome/sobrenome, encontro vários casos de pessoas que estão no mesmo órgão, tem o mesmo sobrenome, em geral uma mulher e um homem, ele com cargo de direção, ela com uma função comissionada de assessoramento, mas com um salário mais alto que a média. Sem uma verificação mais profunda, não posso afirmar nada, mas parece que: ou os diretores se apaixonam pelas assessoras mais bem graduadas, ou eles conseguem encaixar suas esposas nos melhores cargos de assessoramento dos órgãos onde trabalham. Conhecendo o serviço público, vou chutar que é a segunda opção!

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 &lt; 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).

Em Roma, coma os romanos!

Estádio de futebol inacabado.

Estádio de futebol inacabado.

O Ricbit me sugeriu blogar sobre Roma antiga (o fato dele estar por lá deve ter influenciado a decisão, não?) E depois de pensar sobre vários assuntos blogáveis, como comparar Júlio César com Al-Capone (depois de ler Paul Veyne falando que a constituição romana é semelhante à da máfia, que também daria um bom post mas precisaria de váaaaaarios dias pra pesquisar sobre a máfia antes de escrever), lembrei desse próverbio inglês:

When in Rome, do as the Romans do.

Que em bom português é normalmente traduzido por:

Em Roma, como os Romanos.

E resolvi blogar sobre a sua origem. Pra variar, vou mandar ver logo duas hipóteses, a girinada e a verdadeira (ou pelo menos mais provável, por falta de fonte realmente fiável sobre o assunto provérbios populares).

Primeira versão (a versão religiosa):

A primeira versão é religiosa. E começa assim: No início do cristianismo, a hierarquia entre os bispos da igreja católica ainda não estava totalmente definida, e essa coisa que temos hoje de One Pope to rule them all não existia ainda. Cada bispo era basicamente autônomo na sua cidade. Foi nessa época que Santo Agostinho, recém chegado de Roma questionou Santo Ambrósio (uma deliciosa cerveja canadense, por sinal) sobre as diferenças de costume. O que mais chocava o coitado do santo era o diabo do jejum:

Em Roma jejuamos na sexta feira, disse Agostinho.

Pois em Milão, não! Replicou Ambrósio.

Mas se eu venho de Roma, e sigo a igreja de lá, devo jejuar?

Olha, meu amigo, deixa eu te dar um conselho: Em Roma, coma os romanos! Em Milão, coma bife à milanesa!

Santo Agostinho, padroeiro da presidência do Paraguai.

Santo Agostinho, padroeiro da presidência do Paraguai.

Era, claro, um trocadilho infame quanto aos jejuns (jejuns, coma bifes, etc, entendeu???). E ao que parece, o chefe da guarda pretoriana, uma espécie de Protógenes Queiroz da época, tinha escutas apropriadamente colocadas nos principais gabinetes de autoridades (a pedido do imperador Teodósio Lula da Silva, que nega saber de qualquer coisa), escutou a hilária conversa e divulgou aos panfleteiros de plantão (que faziam o papel de divulgação de fofocas de forma impressa, algo mais ou menos semelhante às revistas semanais hoje em dia).

O resultado foi um rebuliço só: Bife a milanesa virou prato nacional, a ser comido nas sextas feiras, e o provérbio "Em Roma, coma os romanos" tomou o império de tal forma que Teodósio proibiu seu uso em locais públicos, mas de nada adiantou. A coisa só cedeu em meados do século XIX, na inglaterra vitoriana que se considerava o novo Império Romano e admirava de tal forma a sua antiguidade que ressuscitou e recriou tudo que por lá havia. Inclusive os provérbios. Mas o puritanismo dos vitorianos ainda sobrepujava sua admiração por Roma. Quando republicou e traduziu as cartas de agostinho, Robert Burton preferiu poupar a sociedade da época de tamanha devassidão, e deu a ela a nova tradução, que é a que conhecemos até hoje:

When in Rome, do as the Romans do.

Segunda versão (a versão laica).

É muito fácil atribuir provérbios romanos a religião, afinal Jesus mesmo, na bíblia, já diz: A César o que é de César. E foi mesmo César (um dos) quem protagoniza a nossa segunda versão. César, o Júlio, foi famoso por vir, ver e vencer. Augusto por pagar suas dívidas nas calendas gregas. Nero, coitado, por por fogo em Roma, e Cláudio por ser retardado e aleijado[foot]Na verdade não dá pra saber muito bem o que ele era, porque os antigos misturam muito isso de ser aleijado, retardado ou simplesmente sem noção. Uma dessas três coisas ele com certeza era.[/foot].

E depois eu que sou feio...

E depois eu que sou feio...

Pois foi esse mesmo Cláudio, que hora é retardado, hora um grande estudioso[foot]Olha só como as fontes sobre história romana são controversas...[/foot], quem recebeu o embaixador da Trácia, no ano de 43 DC[foot]Depois de cristo, nada a ver com a editora de quadrinhos[/foot]. E benzadeus, ele como bom romano que nunca tinha saído da itália e passava as férias de verão em Ariminum, achou o costume de arrotar depois da refeição simplesmente uma porcaria completa! Indignado, não só expulsou o embaixador de sua presença como mandou uma legião inteira para conquistar a Trácia (sim, a dinastia júlio-claudiana era meio temperamental: o Tio-avô dele, Júlio, contratou uma frota naval para perseguir e capturar os piratas que o haviam seqüestrado e depois os crucificou, isso tudo para cumprir uma promessa que ele fez pros próprios piratas, dá procê?).

Por fim, ele foi pessoalmente à capital da Trácia onde exigiu vassalagem ao Sátrapa[foot]Que é tipo um sacripanta, só que manda mais.[/foot] com um discurso sobre boas maneiras à moda romana. Pra terminar, o sair do palácio ainda indignado, soltou:

E de agora em diante, quando for a Roma, faça como os romanos!

Tomtom

Nasceu neste domingo 12/04/2009, às 4:16h da madrugada o tomtom. Como bom filho de nerd, já nasceu com um LOLCat próprio (baseado em idéia do kentaro).

Obrigado a todos que ligaram, escreveram, twittaram e orkutaram, não necessáriamente nessa mesma ordem... Ou não...

eeebuntu, ubuntu-eee, crunchee e eeexubuntu: Impressões de uma semana depois de comprar um cartão SD de 8Gb

Semana passada eu disse que tinha comprado um cartão de memória de 8Gb pra rodar outros OSs no meu eeepc 701. Essa semana eu conto o que achei, tendo experimentado um pouco de tudo.

O primeiro que eu instalei foi o ubunutu-eee. Achei bacana, mas o tempo de boot era pobrinho. Pedi sugestões e esses foram os que me indicaram:

Ubuntu-eee no meu eeePC

Ubuntu-eee no meu eeePC

A comparação que eu fiz é muito mais intuitiva do que qualquer outra coisa, por isso a percepção de outras pessoas pode ser completamente diferente da minha. Vou dividir as impressões de acordo com o que eu encontrei de diferenças relevantes entre os sistemas, seja porque me agradou, seja porque desagradou.

Pros apressados, uma tabela:

eeebuntu Ubuntu-eee cruncheee eeexubuntu xandros (pre instalado)
Tempo de boot ~2 min ~2 min ~2 min ~1min 20 sec 20 sec (+20 sec para conectar na rede wi-fi)
Interface com o usuário Excelente Excelente (mas mais feio) Ruim Péssima Razoável
Programas pré instalados Ruim Muito bom Bom Ruim Razoável
Configurações especificas para o modelo Bom Ruim Excelente Ruim Pré-configurado

Pros menos apressados... Continue reading

twilight, ubuntu-eee e clotilde!

Primeiro, graças a Lila, que alguns aqui conhecem, consegui o "O destino se chama Clotilde". Chegou ontem, e eu já comecei a ler. Eu lembrava de muita coisa, mas o que mata são realmente os detalhes: hilários, sempre! Valeu mesmo a pena "caçar" de novo o livro depois de tantos anos. Se tiver paciência, posto uma resenha depois de (re)ler.

Segundo, comprei um cartão SDHC de 8Gb pra instalar outros SO's no meu eee pc. Tentei agora o ubuntu-eee. Legal, mas dois detalhes fodem com tudo: Ele exige muito mais processamento do eee (o micro fica quente enquanto eu uso, o que nao acontece no xandros) e o tempo de boot é ABSURDAMENTE maior. Pelas minhas contas, 6 vezes maior já que de 20 segundos pula pra 2 minutos. Vou experimentar apenas "hibernar" pra ver como fica.

Alguém tem outra dica de SO pra rodar no bichinho? (Sempre no cartão de memória, porque não vou matar o xandros nativo dele enquanto não tiver algo que boote em menos de 30 segundos). Será que rola recompilar o kernel "no braço" tirando tudo que eu não for usar? Outra coisa que me incomoda é o pulseaudio! Rola desabilitar/desinstalar?

Zé Topete e Dentucinha

Zé Topete e Dentucinha

E por ultimo, vi o filme mais emo da historia da humanidade: Twilight! Minha esposa[foot]Desculpa de peidorrero! CLARO que eu que queria ver, afinal o Edward é lindooooooooooooooooooooooo[/foot] leu os livros e resolveu ver o filme. Enrolamos ainda um pouco, e hoje estávamos sem o que fazer, resolvemos ver. Segundo a Anita, o Edward é bonito, mas o filme é um lixo! É arrastado, lento, com péssimas atuações e um elenco EMO, um roteiro EMO e uma filmagem EMO que parece que mesmo quando o casal tá no mór love, tá todo mundo triste, prestes a chorar. A ÚNICA cena onde o povo abre um sorriso é quando o Edward apresenta a dentucinha pra família dele (Confesso que a dentucinha também valeria a pena ver num filme de vampiros "de verdade" onde rolasse um pouco mais de putaria, apesar de ter pouca carne!). Enfim, entendi porque a miguxada adorou o filme: é emo até a alma, e emo tá na moda. O vampiro é bonitão e tem cabelinho com um topete meio emo, meio da moda. E a censura é livre, afinal ninguém come ninguém. Aconselho quem for pedófilo a levar sua namorada de 14 anos, ela deve adorar!

Pensando bem, acho que o ambiente "emo" tem mais a ver com os atores serem todos totalmente inexpressivos do que com a intenção de ser emo. É que o filme é tão ruim, que sem querer fizeram algo que agradasse o público aborrecente e irritasse o resto do mundo. E a coitada da dentucinha desperdiçou a carreira dela com esse filme. Se não filmarem as continuações, ela nunca mais vai conseguir um papel decente (e ela era a melhor atriz do filme todo, tirando talvez o índio de cadeiras de rodas que aparece em duas cenas).

Tudum-pá!

Ajudem a espalhar o meme:

http://tudumpa.com/