Categories
Blockchain girinadas

Descentralizando tudo

Esse artigo é baseado na palestra de mesmo título criada por mim e pelo Gabriel Rhama para a Campus Party de Brasília1. Como o conteúdo é bem legal, achei que colocar ele por escrito seria também interessante. Pra facilitar, devo escrever em várias partes, uma pra cada um dos temas que abordamos na palestra.

Introdução

A primeira coisa que vem à mente quando falamos de criptomoedas2 é descentralização3. Criptomoedas são descentralizadas, Blockchain é consenso descentralizado. Mas o que isso quer dizer? Pra que serve isso? Porque isso é tão importante?

TCP/IP4

Vamos voltar um pouco no passado e falar sobre a internet. Na década de 1960 o governo americano financiou um projeto de pesquisa para a criação de uma rede de computadores. Não é a primeira rede, já existiam outras, abrangendo universidades, empresas, etc. Essa nova rede tinha um objetivo específico: resistir a ataques nucleares que tirassem do ar um ou mais dos computadores envolvidos. Até então, as redes eram estruturadas de forma centralizada (um computador central que se comunica com vários terminais) ou hierárquica (sem apenas um computador central, mas computadores ligados de forma em que alguns são concentradores das informações vindas dos outros). Redes com esses formatos são extremamente frágeis em caso de ataque. Atacando um único computador você interrompe toda a rede.

A Darpa5, agência de pesquisa do departamento de defesa dos EUA, junto com algumas universidades norte-americanas, desenvolveu então a ARPANET, e seu protocolo de comunicação, o TCP/IP. A ARPANET, que depois evoluiu e veio a se chamar Internet6, usava de um protocolo descentralizado, onde nenhum computador é mais importante que o outro e onde os caminhos entre um computador e outro se adaptavam de acordo com a disponibilidade dos mesmos. Com isso, se um computador saísse do ar por qualquer motivo, os outros continuavam se comunicando normalmente. Não havia um ponto central de falha. Tínhamos aí o primeiro uso da descentralização: Resistência a falhas e ataques.

O TCP/IP foi o primeiro passo em direção a descentralização, a descentralização dos canais de comunicação.

Bitcoin78

Em 2008, Satoshi Nakamoto9 deu mais um passo em direção a descentralização: O Bitcoin10. Bitcoin é uma moeda digital descentralizada que funciona sobre um protocolo criptográfico. Era logo depois da crise de 200811, onde os bancos haviam criado uma bolha econômica e depois recorreram aos governos dos seus países para evitarem a falência, enriquecendo com dinheiro público ao mesmo tempo em que transformavam em pó as economias da população. A ideia do Satoshi era dar ao cidadão comum uma alternativa ao dinheiro digital que não fosse controlada pelos bancos.

Não tenho certeza se o Satoshi tinha noção de quão revolucionário era o sistema que ele criou. Acredito que, pra ele, era só mais uma evolução dos sistemas de moedas criptográficas que tinham vindo antes, como o bit-gold12 ou o hashcash13. Inclusive, muitas das ideias que ele usou foram tiradas dessas precursoras.

Com o Bitcoin, o Satoshi se aproveita de mais uma vantagem da descentralização: Resistência à censura. Os bancos não podem mais fechar sua conta e recusar seu crédito, eles não tem mais controle sobre seu dinheiro.

O Bitcoin trouxe a descentralização do dinheiro!

Blockchain14

Esse é um caso bem especial. Para o Satoshi Nakamoto, só existia o Bitcoin15. Só depois de lançado o Bitcoin é que outros desenvolvedores e cientistas perceberam que dentro do Bitcoin existia mais uma inovação, que poderia ter vida própria: A Blockchain! A Blockchain, ou cadeia de blocos, é a estrutura de dados que dá suporte ao Bitcoin. É o banco de dados por trás do Bitcoin, e de todas as criptomoedas.

Não vou entrar aqui no debate filosófico se Blockchain existe sem o Bitcoin ou não. Alguns acham que sim, outros que não. Enfim, não é o meu debate e daria para uma nova série de artigos. Afirmo apenas que ela tem uso que não é simplesmente dar suporte ao Bitcoin, precisando do Bitcoin para existir ou não.1617

A Blockchain trouxe mais uma inovação: ela permite o registro de dados, não somente de dados financeiros, mas quaisquer dados, de forma descentralizada. Enquanto o Bitcoin usa a Blockchain apenas para o fim específico de realizar transações financeiras, outros sistemas podem se aproveitar dessa mesma infraestrutura para registrar todo tipo de dados.

É bom tomar cuidado com isso. Descentralização não é algo barato. Uma Blockchain vai ser replicada em TODOS os computadores que formam a rede descentralizada onde ela opera. Isso tem um custo. Esse custo é refletido nas famosas “taxas de transação” do Bitcoin, ou no “gas” da rede Ethereum. Então enquanto Blockchain é uma ferramenta fantástica, ela não é bala de prata. Ela é uma solução cara para problemas específicos.

A Blockchain é então outro degrau no nosso caminho rumo a descentralização: descentralização do armazenamento de informações.

Smart-Contracts1819

Apesar de já existirem no Bitcoin os smart-contracts “simples”, foi com a Ethereum e o Vitalik que surgiram os smart-contracts como entendemos hoje. Uma coisa importante que é preciso entender sobre smart-contracts é que, apesar do nome, eles não são contratos como nós entendemos. São trechos de código capazes de serem executados de forma descentralizada. Você escreve um trecho de código, registra ele na Blockchain, e depois ele pode ser executado por você ou por terceiros para processar as informações e registrá-las também na Blockchain. Um smart-contract vai ser executado simultaneamente em todos os nós participantes da sua rede de forma a validar se os dados gerados por ele podem ou não ser gravados na Blockchain. De novo, como toda descentralização, esse processo é caro. Por isso existem restrições quanto ao tamanho e funcionalidade do código a ser executado. E essa execução tem um preço a ser pago: o “gas”20, a ser pago aos mineradores em troca desse serviço.

Smart-contracts então não são contratos, são uma forma de estender as regras de consenso de uma Blockchain. Com um smart-contract o usuário cria novas validações, novas regras de consenso, novas funcionalidades em cima de uma Blockchain existente, sem precisar criar uma nova Blockchain. Isso permitiu coisas com os tokens ERC2021, e consequentemente as ICOs22. E permite que você estenda sua Blockchain para armazenar e processar virtualmente qualquer tipo de dado.

Smart-contracts são a descentralização do processamento de dados.

Decred23

Em 2013, Tacotime, criador da Monero24, propôs uma moeda chamada Memcoin2 (MC2), usando um sistema híbrido de Proof-of-Work (PoW) e Proof-of-Stake (PoS)2526. Logo em seguida, e de forma independente, o Charlie Lee27, da Litecoin propôs um sistema similar que ele chamou de Proof-of-Activity (PoA)2829. As ideias por trás da MC2 acabaram indo parar nos ouvidos da Company 0, empresa responsável pelo btcsuite, e a equipe então usou essas ideias em uma nova moeda, a Decred30. O foco principal da Decred seria prover governança descentralizada para evitar os problemas de governança constantes na Criptoesfera que geram tantos forks, novas moedas e brigas políticas.

A Decred dispõe de um sistema de votação onchain, um sistema de registro de documentos (Dcrtime) e de apresentação de propostas para a moeda (Politeia).

Decred é a descentralização da governança.

Resumo da primeira parte e conclusão

Nesse primeiro artigo vimos a evolução das tecnologias e criptomoedas em direção à descentralização:

  • TCP/IP é a descentralização dos canais de comunicação.
  • Bitcoin é a descentralização do dinheiro
  • A Blockchain é a descentralização do armazenamento de informações.
  • Smart-contracts são a descentralização do processamento de dados.
  • Decred é a descentralização da governança.

Em especial vimos a importância da descentralização em:

  • Resistência a falhas
  • Resistência a ataques
  • Resistência a censura.

Descentralização é uma ferramenta de resiliência para sistemas de informação. Com a descentralização, busca-se garantir que nenhum tipo de falha, ataque, ou entidade em posição de autoridade interrompa, censure ou interfira na operação dos sistemas.

 

Categories
feminismo girinadas

Nós não somos ocidentais.

A primeira vez que eu me deparei com esse problema foi em 83, na França, quando minha mãe, durante o doutorado, precisou preencher um formulário da universidade que perguntava “origem cultural”, ou algo assim. Ela marcou “ocidental”. O orientador dela reclamou:
– Você não é ocidental!
– Não? ela perguntou espantada. Mas então o que eu marco?
E as opções eram africano, árabe, próximo-asiático ou oriental. Não conseguiram descobrir o que ela era, deixaram em branco. Descobrimos o que nós éramos 10 anos mais tarde, no canadá, onde os formulários sempre tinham a opção: latino! (Alguns bem explícitos, “latino, mesmo que branco”). Não, definitivamente não éramos ocidentais, mas agora pelo menos éramos alguma coisa.

The-Good-the-Bad-and-the-Ugly[amazonify]B0052REUW0:right[/amazonify]Daí em diante, sempre me deparo com esse problema. Outro dia foi um blog cético qualquer que falava sobre o oriente médio citando um [amazonify]B0052REUW0::text::::livro do Pinker[/amazonify] sobre a violencia: “o pinker mostra como nós passamos por um processo civilizatório que resultou em maiores direitos humanos”, e pombas, o pinker não fala de nós. Ele falava explicitamente: EUA e Europa Ocidental. E aí eu percebo que o blogueiro cometeu o mesmo erro da minha mãe e preencheu no seu formulário mental: “etnia: ocidental”. Não, o pinker não falou da gente, nós não passamos pelo processo civilizatório que ele cita, nós não somos ocidentais.

Tem horas que eu mesmo me confundo. Por mais que eu saiba que não sou ocidental, essa idéia nos permeia tanto que, se não prestarmos atenção, a gente se agarra nela. Quando estava grávido do Tomás, fui ler o [amazonify]B000FC1KBG::text::::livro da encantadora de bebês[/amazonify]. E pombas, que mulher “caga regras”. Me revoltava a forma como ela tratava os bebês e os pais. E aí num belo momento ela me fala que numa casa onde ela trabalhou estava tudo errado: o bebê só acalmava no colo. E era tudo por causa de uma babá guatemalteca que sempre mantinha o bebê no colo, já que, no país dela, os bebês ficam sempre no colo e não no berço como deveria ser.

Nossa! Larguei o livro xingando: QUE MULHER XENÓFOBA RACISTA DO CARALHO! Que diabos, ela quer impor a cultura dela, desprezando a cultura da coitada da babá guatemalteca, que, se bobear, nunca tinha visto um berço antes de ir pros EUA. Bufei por uns bons minutos até parar pra pensar de novo: Pombas, porque eu tou puto? Ela nem desprezou a cultura da outra, só constatou como era! Mas então porque me pareceu que ela estava “cagando regras”? E aí cai a ficha de novo: Porque o livro dela não é pra mim! EU NÃO SOU OCIDENTAL! Ela não está cagando regras, ela está ensinando os pais a tratarem os bebês como se faz na cultura dela, na cultura ocidental! Ela não “caga a regra” de que criança não pode ir no colo, essa É a regra na cultura dela. Assim como criança ficar no colo é a regra na NOSSA cultura, mais parecida com a da babá guatemalteca do que da dela!

Aí chego no ponto atual, no meu ultimo conflito com a cultura ocidental: o texto que circulou no facebook traduzido como “A derrota do feminismo no Facebook“. Quando li, fiquei revoltado. POMBAS, que mulher “caga regras”, maldita preconceituosa! Culpando as coitadas das mães, que já não sofrem pouca pressão da sociedade, só porque cederam um pouquinho da sua personalidade em nome de serem mães, no maior estilo “blame the victim”. Me deu ódio, me meti em discussões acirradas sobre feminismo ser sobre dar poder pra essas mães se encontrarem fora dos estereótipos, e não culpá-las e estereotipá-las desse jeito.

Aí, discutindo com o Bruno ainda sobre o assunto, uma frase dele me deixou com a pulga trás da orelha: “Mas a minha avó, por exemplo, DEPENDE dos filhos pra tudo.” Pombas, se a avó dele, e as mulheres da geração das nossas mães em geral, é que se encaixam nesse estereótipo, porque diabos a Katie Roiphe me diz no texto que “Não posso deixar de pensar que nossos pais jamais teriam suportado tênis que apitam ou conversas que giram inteiramente em torno de crianças.” Não encaixava, como assim nossos pais jamais teriam suportado, se são exatamente nossas mães que mais se comportam assim?

Mas é claro! É porque NÓS NÃO SOMOS OCIDENTAIS! Esse texto não era pra mim, não era pra nós. A Katie Roiphe não está cagando regras, nem mesmo culpando as vítimas. Ela está constatando uma mudança cultural que, na opinião dela é negativa, e está apontando os agentes da mudança: as mães que trocam suas fotos no facebook pela dos filhos! Enquanto pra nós, latinos, postar essa foto é um reflexo da opressão do passado, pra ela, ocidental, é uma novidade, uma escolha de caminho futuro, um retrocesso! Não era pra eu ter raiva do texto porque o texto não foi escrito pra mim. Eu não sou ocidental!

Categories
esquisitices girinadas nerdices Uncategorized

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
Categories
girinadas nerdices política

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.

Categories
girinadas nerdices política

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 1). 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!

References

References
1 parece que esse valor andou crescendo de lá pra cá, então vou ter de conferir e baixar tudo de novo
Categories
girinadas

How i met your mother

Crianças,

Crianças da série How I Met Your MotherNo outono de 1999 o seu tio paulosta me chamou no mirc. Naquela época a internet era movida a vapor, a injeção eletrônica ainda era novidade e a piadinha de atender o chinelo toda vez que algum celular tocava ainda tinha graça. Era um tempo em que a internet parecia feita por torpedos de celular, só que sem celular, e o mirc era a segunda forma de comunicação mais utilizada na internet (a primeira era recadinhos em post-its pregados no monitor da pessoa). Pois bem, foi nesse ano que seu tio paulosta me chamou no mirc:

<paulosta> girino, tava mascano uma mulher aqui mas acho que ela eh proce.
[naquela época teclado acentuado também era novidade, quem dirá um programa que aceitasse acentuação]
<girino> porque?
<paulosta> ela eh bonitinha, mas eh baixinha e gordinha!
<girino> tem foto?
<paulosta> perai que jah mando!
-paulosta- DCC send ny.jpg
-girino- DCC file received 17 bytes/s
<paulosta> viu aih? eh essa anita que tah no canal!

Não sei bem se o diálogo foi exatamente esse, mas foi algo bem parecido com isso. Nesse ponto eu ainda não conheci sua mãe. Não. Primeiro porque, bem, naquela época medieval, a gente não tinha muito o costume de sair com a primeira pessoa que conversasse no mirc. Segundo porque ela fugiu pra Chicago e passou uns dois meses por lá… Conversando comigo todo dia, pelo mirc, claro! Num desses dias, a curiosidade dela falou mais forte:

<anita> girino, qual o seu nome?
<girino> girino mesmo, porque?
<anita> hummm

E ao mesmo tempo, outra janelinha pulava na minha tela:

<paulosta> a anita perguntou seu nome e eu falei que era julio cesar. finge que eh verdade.
<girino> hauhauhauahauhauahu [naquela época a gente ainda não ria “rss” ou “lol”, era hahaha ou huahauhua, acreditam nisso?]

De volta a janelinha da anita:

<anita> ah, eu descobri seu nome! eh Julio Cesar!
<girino> como vc descobriu? foi o paulosta que te contou?
<anita> claro que nao! eu descobri sozinha!

Desse dia em diante, eu era, pra todos os efeitos, Júlio César! (Menos mal, se já  acreditaram quando eu disse que meu pai tinha morrido na guerra da Criméia e, no primeiro de abril de 2002, que eu faleci vítima de gripe asiática, eu chamar Júlio César era fácil).

Depois dessa lenga lenga toda, a galera do mirc, ou melhor, a galera que bebia comigo e com o paulosta e também frequentava o mirc por nossa causa, resolveu fazer um encontro no boliche do shopping Del Rey. A Anita tinha voltado de chicago e pela primeira vez eu a convenci a me encontrar: não estaríamos sozinhos, era perto da casa dela e no fim das contas, se tudo desse errado a gente poderia só jogar boliche!

Quer dizer, a parte do “não estaríamos sozinhos” não funcionava em favor dela: eu estaria com meus companheiros de farra, todos conspirando para que eu ficasse com ela. Mas ela não precisava saber! Até então, eu devia parecer um sujeito nerd romântico solitário que ela conheceu na internet. Que ilusão. Quando ela chegou, ela já foi logo se assustando, pensando (bom, ACHO que ela pensou isso, confirmem com ela depois):

“Meu Deus! Que povo bêbado sem noção. Que menino nojento! E ele nem faz a barba! Que horror! O quê que eu tou fazendo aqui?”

Mas com tudo planejado, e o “não estaríamos sozinhos” já funcionando, fomos pressionados num canto onde consegui um primeiro beijo sob vivas e aplausos. E sob olhar de desespero por parte dela, já pensando que não tinha como a coisa piorar, eu viro pra ela e falo:

– Ou, para de me chamar de Júlio César, sô! Meu nome é João!

Sete anos depois, nos casamos!
Se eu não tomei um tapa na cara nesse dia, acho que nunca mais vou tomar!

(Esse post foi escrito para o jornalzinho interno da empresa onde a Anita trabalha, em homenagem ao dia dos namorados de 2011).

Categories
girinadas HQ resenhas

Livros da semana

Bom terminei 3 livros essa semana, um eBook e 2 de quadrinhos.

Dead Until Dark

[amazonify]B003P9WR4A:right[/amazonify] O primeiro livro da série Southern Vampire Mysteries @ wikipedia.org (en) da Charlaine Harris @ wikipedia.org (en), que deu origem a série de TV True Blood @ wikipedia.org (en). No começo era uma forma de experimentar ler eBooks no celular (android, rodando o software do kindle). Mas o livro é fácil e empolgante. A narrativa em primeira pessoa dá uma visão mais “pessoal” da história do que o seriado. É mais previsível que na TV, mas tem uma riqueza de detalhes que só um bom livro pode dar. Recomendo muito pra quem gosta de vampiros ou da própria série True Blood. A linguagem é típica de best-seller, e a leitura flui bastante. Bom pra uma tarde de diversão.

MSP: Maurício de Souza por 50 artistas

[amazonify]B001FB4W0W:right[/amazonify] Ganhei este livro da minha irmã. São histórias curtas ou as vezes apenas um simples charge, escritas por diversos autores em homenagem aos 50 anos de carreira do Maurício de Souza @ wikipedia.org (en). Confesso que não sou muito fã dele mesmo não, mas sei o que ele representa pro quadrinho nacional. As histórias giram muito em torno dos mesmos tempos, muitas falando diretamente do aniversário de carreira do Maurício. O astronauta também apareceu super-representado, não sei se pela característica futurista do personagem ele pareceu mais fácil de trabalhar pros autores de Sci-Fi, ou se foi pela flexibilidade do personagem… Enfim, exageraram 😀 A maioria é mesmo bobinha, mas algumas são fenomenais. Logo de cara o Laerte abre com a mesma genialidade de sempre! O fechamento, pelo Vitor Cafaggi, também não fica por menos. Lá dentro, as charges simples do Angeli, do Gustavo Duarte e Dalcio machado dão um show a parte. Enfim, vale muito a pena, com algumas estórias fenomenais, apesar de várias meio chochas no meio!

O chinês americano

[amazonify]1596433736:right[/amazonify] Esse também foi presente, dessa vez da Lígia e do Pedro, meus vizinhos e companheiros de cachorro. A Lígia teve de ler pro mestrado uma pancada de quadrinhos auto-biográficos, e esse foi um dos poucos que ela deixou de fora. Se arrependeu depois! Eu me arrependeria também de não lê-lo. Pra mim foi o grande motivo desse post: é simplesmente fantástico. O Gene Luen Yang @ wikipedia.org (en) tem arte é simples, num estilo que junta Genndy Tartakovsky @ wikipedia.org (en) e Laerte com um quê de realismo e que dá vontade de ler mais a cada quadrinho. O roteiro mistura a velha lenda chinesa do Rei Macaco @ wikipedia.org (en) com a adolescência conturbada de um filho de imigrantes, sobrevivendo em um mundo que faz questão de rejeitá-lo! Tudo isso com uma cadência e fluidez que prendem o leitor. Difícil é não ler de uma sentada só. Sem a menor dúvida é a melhor história em quadrinhos que já li esse ano.

Categories
girinadas

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.
Categories
administrativia girinadas rant

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:

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!

References

References
1 pra quem estiver curioso, era o TeHospedo. NÃO USEM, o contrato é leonino e o suporte coloca a culpa dos problemas no usuário!
2 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…
Categories
administrativia girinadas nerdices

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!

%d bloggers like this: