quinta-feira, 18 de agosto de 2011

Da multiplicação de números aleatórios

Cuidado: esse post contém matemática, mas nada de muito difícil.

Essa tirinha, do Vida de Programador, fala em multiplicar dois números aleatórios para obter um número mais aleatório. Parece um tanto óbvio que isso é uma boa ideia, não?

Acontece que isso não funciona da forma esperada, e pode em alguns casos até diminuir a aleatoriedade dos números.

Não sei estatística o suficiente para provar de forma formal (e pelo que eu pesquisei isso vai inclusive cair em algumas contas meio tensas - o Mathematica inclusive não dá uma forma fechada para esse produto), mas de forma informal pode ser feito utilizando Python + SciPy, ou qualquer outra linguagem de programação.

Primeiro, geram-se 2 vetores seguindo a distribuição uniforme (a mais usada pelo 'random' das linguagens de programação). Após, multiplicam-se ambos, e o resultado não tem nada uniforme - aliás, parece mais exponencial, não? A mesma coisa com a soma. Vamos aos gráficos (n = 10000):





























Pior ainda é multiplicar muitos números aleatórios, o que gera uma tendência extrema. Esse exemplo com 6 números aleatórios (n = 500000) demonstra:















Então, tem-se que multiplicar números aleatórios modifica a distribuição deles. Pode ser que isso seja desejável ou não vá afetar nosso problema, pode ser que não: que eles adicionem um viés, por exemplo num jogo, numa simulação, ou na seleção de propagandas a serem colocadas em um site.

Números "mais aleatórios"? Só com geradores de números aleatórios por hardware, por exemplo este, ou usando dispositivos como o /dev/random. Mas não a solução do nosso querido POGramador.

O código Python? Tem aqui.

segunda-feira, 8 de agosto de 2011

Não trabalho (nem faço seus trabalhos) de graça

Vejo muitas pessoas querendo que profissionais façam trabalhos de graça ou por preços módicos, muitas vezes usando o velho mimimi do vai ajudar pro seu currículo, vai ser bom para divulgar seu trabalho etc... Infelizmente, isso tudo não cola, ao menos não para os bons profissionais. Evidente que podemos abrir exceções para situações de pobreza, de desastres naturais etc... mas certamente quem tem acesso a internet e pede isso em fóruns não cai nessa situação

Todos os profissionais despenderam tempo e dinheiro para se tornarem o que são hoje: cursos, ferramentas, equipamento, estudo etc... e continuam investindo nisso. Temos que pagar impostos e, em alguns casos (como muitos dos cursos de nível superior), para uma associação de classe. E assinamos embaixo, assumimos responsabilidade pelo nosso trabalho e não iremos desaparecer da noite pro dia (a menos que sejamos abduzidos) deixando o pepino nas mãos do cliente.

Contraste com o moleque que faz qualquer serviço por 30 reau. Leia-se faz: suas soluções são porcarias que impossibilitam melhorias, manutenções, atualizações etc... assim dando a ele garantia que seu cliente ficará "viciado". E também, ele torna-se uma poderosa máquina de destruir mercados e lesar toda a concorrência que cobra o preço que ela considera justo pelo serviço dela - afinal, a maioria das pessoas olha primeiro... o preço, visto que elas não têm conhecimento técnico para analisar designs, códigos-fonte, projetos etc...


Você confiaria num engenheiro que vende seus serviços a 30 reau? Ou em um médico que faz qualquer cirurgia por esse mesmo valor? Eu, e qualquer pessoa sensata, não: há algo de bem errado (e bem ilegal) em um profissional que cobra menos do que seu trabalho vale. Não tenho conhecimentos para afirmar sobre as profissões da saúde, do direito etc... mas na Engenharia, o código de ética do CONFEA é bastante claro sobre isso:

Art. 10 - No exercício da profissão são condutas vedadas ao
profissional:
[...]
III - nas relações com os clientes, empregadores e colaboradores:
a) formular proposta de salários inferiores ao mínimo profissional legal;
b) apresentar proposta de honorários com valores vis ou extorsivos ou desrespeitando tabelas de honorários mínimos aplicáveis;

Para a realização de um bom trabalho, são necessários vários passos, entender o problema, procurar a solução que melhor atende às necessidades, implementá-la e garantir o seu funcionamento durante o ciclo de vida do produto, da empresa etc... e não será numa mensagem em um fórum ou no Twitter que essa consultoria se dará. Podem-se tirar dúvidas, podem-se dar ajudas pontuais, mas não podemos propor uma solução completa em 140 caracteres ou com informações esparsas fornecidas em um fórum aleatório.

Nas profissões com nível superior, a situação se agrava. Para um engenheiro, não existe fazer um projetinho, fazer um jeitinho ali, assinar uns papéis. Por mais simples que seja (ou que aparente ser) a solução de um problema, existe um trabalho no qual irei colocar meu nome e meu registro do CREA, e com meu nome nele, fica implícito que assumirei as consequências - sob risco inclusive de ter meu registro profissional cassado - se ele tiver alguma falha grave. A mesma coisa para um médico ou um advogado, creio eu.


Tampouco posso fazer gatos, gambiarras etc... para você sair ganhando de forma ilegal - novamente, existe um pequeno e importantíssimo conceito chamado responsabilidade criminal. E nem posso aceitar pagamentos para que eu tape os olhos perante esse tipo de violação. Citando o mesmo código de ética:
Da honradez da profissão
III - A profissão é alto título de honra e sua prática exige conduta honesta, digna e cidadã;
Acho que é bem óbvio que eu fazer uma mutreta para você não é "conduta honesta, digna e cidadã".

E o pior são as pessoas que se emputecem quando ouvem um não, não trabalho de graça. Para elas, você é um mente-fechada que não quer se abrir a novas experiências, que não quer colaborar com os outros etc... E não quero mesmo: não quero contribuir com quem me desvaloriza.

O mesmo se aplica aos trabalhos universitários (e escolares como um todo): quem é o aluno que tem interesse em passar? Você, não eu. É você quem tem que fazer seus trabalhos, seus projetos, seus artigos e seus estudos, sob pena de você se tornar um mero portador de diploma, e não um profissional. Ah, mas eu não sei escrever direito? Pois bem, aprenda antes que seja tarde demais - você está na faculdade, e não será expulso por perguntar para um professor ou pedir uma revisão de nota.

Você pode pedir para alguém fazer seus trabalhos na faculdade, mas não poderá pedir para alguém realizar seu trabalho depois que você estiver formado. Tampouco você vai conseguir ir longe se esses trabalhos forem meros remixes de outros que você achou no Google ou pegou com o pessoal do semestre passado, intercalados com um copia-cola daqui, um plágio dali etc... Basta lembrar que isso pode facilmente acabar com uma carreira.

Não, não trabalho de graça. Não importa qual o mimimi que você use. Não gostou? Contrate um profissional que valha os 50 reais que você quer pagar. E tampouco faço seus trabalhos, não importa o quanto você pague, a menos que você concorde em colocar o meu nome no seu diploma.

(ps: antes que venham me falar disso, serviços do tipo formato seu trabalho nas normas da ABNT ou traduzo seu trabalho/artigo não caem na situação de "faço seu trabalho")

segunda-feira, 1 de agosto de 2011

Saga Épica Acadêmica Integrada

Esse ano, tive que submeter (argh! odeio essa palavra! qual o problema com enviar?) um artigo para a Jornada Acadêmica Integrada (JAI) da UFSM. Resolvi - como sempre faço - submetê-lo uns dias antes do prazo final, justamente para evitar o aborrecimento de sistema indisponível que ocorreria mais para o fim do prazo. Aliás, sempre sou um dos primeiros a enviar artigos, assim que abre o prazo eu envio, e conforme vou evoluindo o artigo, reenvio.

Dito e feito: o sistema passou o domingo todo (31/07), último dia para a submissão, apresentando lentidão e dando erro (timeout, Bad Request etc...) para tarefas tão simples quanto alterar uma palavra no texto ou alterar um dado na inscrição.

Os alunos da UFSM já estão acostumados com a lentidão no Portal do Aluno na época de matrículas - sendo o sistema da JAI hospedado nos mesmos servidores (o endereço IP é o mesmo), já era algo a ser esperado. Porém, o que me surpreende é que a universidade até hoje não tomou atitudes para mitigar um problema que ocorre sistematicamente a cada semestre.

A inscrição da JAI, por exemplo, poderia ter sido colocada na nuvem ou em um hosting dedicado, que com certeza tem mais infra-estrutura que a universidade para essas situações incomuns. Evitaria todos os aborrecimentos que aconteceram até agora; e é algo tão simples, que qualquer congresso ou evento sério faz.

Essa opção se torna ainda mais relevante considerando-se que as conexões da UFSM com a internet já estão saturadas (qualquer pessoa que tenha usado em horário de pico lá sabe) devido ao grande número de usuários.

No geral, fica a mensagem: você está organizando um evento sério, para o qual você espera um grande número de acessos e inscrições? Então tenha infra-estrutura séria, para um grande número de pessoas acessando concorrentemente. E se o seu evento teve problemas com isso, aprenda a lição: melhor superdimensionar e preparar para a pior situação do que subdimensionar e ficar sendo otimista o tempo todo.




Não ficou claro? Troque 'um evento' por 'uma empresa' ou 'uma loja virtual' no parágrafo acima. Acredito que agora eu tenha me feito entender. Você se tornaria cliente de uma empresa ou loja cujo site toda hora dá erro e que não aguenta a demanda? Eu não.

Ah, mas fulano deixou para enviar o artigo na última hora. Embora seja válido e razoável o o argumento, e haja uma certa irresponsabilidade em deixar isso para o fim do prazo, ele não isenta dos desenvolvedores e administradores do site a obrigação de garantir que seu serviço funcionará de forma aceitável.

Agora, espero que eles leiam os logs (e as mensagens que o sistema diz ter enviado para os administradores) e tomem uma atitude para o próximo ano.