Sunday, May 8, 2011

O piloto que conquistou os nossos corações

Faz hoje 29 anos morria o melhor piloto da história da Fórmula 1.
Sim, o melhor. Nenhum outro tinha a garra e o génio de Gilles Villeneuve. Mais: o piloto mais genuíno que a Fórmula 1 conheceu.
Gilles Villeneuve
Não venceu campeonatos. Aliás, venceu poucas corridas. Para ele isso eram coisas secundárias.
Gilles Villeneuve era único piloto que disputava todas as posições, todas as curvas, todos os centimetros de pista. Não importava se tinha material pior que os adversários. Não importava segurar pontos numa corrida. Não importava poupar o material. Nada disso importava. Para ele o importante era correr, era disputar, era ultrapassar os oponentes. Para ele o carro era um objecto que era para ser explorado até passar o limite.
E por isso era amado pelos fãs.
A imagem de marca: passar os limites
Três exemplos que mostram a genialidade do pequeno canadiano.
Treinos do GP USA Leste de 1979: chuva torrencial, pista completamente alagada. O colega de equipa Jody Scheckter (campeão em título) faz o melhor tempo e comenta que não consegue espremer nem mais um décimo. Gilles Villeneuve entra em pista e tira 11 segundos ao tempo do colega.
GP Canadá de 1981: mais uma vez com chuva faz metade da prova com o nariz do carro a tapar-lhe a visão, mas para ele não tinha qualquer importância. Continuava a pilotar e a ultrapassar com a cabeça inclinada para o lado. O nariz acabou por cair e Villeneuve acabou no pódio em terceiro.
Villeneuve com o nariz partido
Mas talvez ele seja mais conhecido pelo GP França de 1979. A prova foi vencida pelo piloto da Renault Jean-Pierre Jabouille. Foi a primeira vitória da Renault. Foi a primeira vitória de um motor turbo.
Mas nada disso interessou. Pois tivemos o privilégio de assistir à mais épica batalha de toda a história da Fórmula 1. Sim, foi uma batalha, entre Gilles Villeneuve e René Arnoux pela segunda posição. É impossível descrever por palavras a genialidade do canadiano:


Faz hoje 29 anos morria o melhor piloto da história da Fórmula 1.
Mas continua nos corações de todos os seus fãs. Mas continua no meu coração.

Thursday, April 21, 2011

Só para quem pensa que sabe C ou C++

Considere-se a expressão (***********printf)(&0["olá mundo!"]);
Isto é legal em C ou C++? Se sim, o que faz?


Notas iniciais:
  1. O operador * (deferenciar um ponteiro) é associativo à direita, ou seja: **a é o mesmo que *(*a);
  2. Uma função quando não está em contexto de ser invocada (ou seja, não tem parenteses à frente) converte-se num ponteiro para a função, ou seja: f é o mesmo que &f;
  3. Uma string constante ("entre aspas") é implementada como um array;
  4. O 'valor' de uma string constante é o endereço do seu primeiro elemento;
  5. O primeiro elemento de qualquer array em C é o de ordem 0 (zero);
  6. A prioridade do operador [] (indexação de array) é superior à prioridade do operador & (obtenção de endereço), ou seja: &a[b] é o mesmo que &(a[b])
  7. O operador [] (indexação de array) é comutativo, ou seja: a[b] é a mesma coisa que b[a]. A razão deste facto é que por definição a[b] é o mesmo que *(a+b), como a soma é comutativa é o mesmo que *(b+a) o que é o mesmo que b[a];
1ª parte: (***********printf)

Por 2) printf é o mesmo que &printf.
Logo, e tendo em atenção 1), *&printf é o mesmo que printf.
Por recursão conclui-se que (***********printf) é o mesmo que printf.

2ª parte: &0["olá mundo!"]

Aplicando 6) fica: &(0["olá mundo!"]).
Pela comutatividade 7) fica: &("olá mundo!"[0])
Tendo em conta 3), "olá mundo!"[0] é o primeiro caracter da string.
Logo aplicando & obtemos o endereço do 1º caracter.
Mas por 4) isso é o mesmo que ter a string "olá mundo!"

Conclusão:

O código inicial é o mesmo que printf("olá mundo");

Monday, April 18, 2011

Build process from hell

Ano de 2004. Um software que estava a ser desenvolvido por uma empresa austríaca e que foi transferido para a minha equipa.
Não usavam source control. Havia registo de bugs (cerca de 500 bugs abertos).
2 milhões de loc, 50 MB de sources e cerca de 6000 ficheiros em Visual C++ 6.0.
1 exe e 52 DLLs, portanto 53 projects dentro do Visual C++. Carradas de dependências entre módulos mas nenhuma indicada no Visual C++.
Como era feito o build process?
Com base nos ficheiros alterados adivinhava-se quais os targets a fazer build.
No caso de erro em alguns dos builds, tinha de se tentar por outra ordem.
No caso de várias tentativas (com várias ordenações) falharem era preciso mudar os settings e forçar o build. Normalmente eram várias DLLs que tinham dependências circulares. Ou seja: A dependia de B; B dependia de C; e C dependia de A. A solução era forçar a criação de A (ignorando erros), depois fazer build a B e a C, depois apagar A e fazer-lhe build novamente (desta vez sem forçar).
Um pesadelo completo! Digamos que com sorte conseguia-se compilar num dia(!) de trabalho.

Depois de um mês de trabalho a identificar todas as dependências e a automatizar o processo de build conseguimos colocar o processo de build fully automatic.
Ficou só a demorar 4h a compilar tudo...

Saturday, April 16, 2011

Como transformar o seu carro num verdadeiro veículo de competição

  • Tambores dos travões de trás pintados de vermelho
  • Lenços nos encostos de cabeça de preferência com a bandeira nacional made in China
  • Coletes fluorescentes nas costas dos bancos
  • Autocolante "Turbo"
  • Autocolante "Penelope"
  • Autocolante "Tuning não é crime"
  • CD pendurado no espelho retrovisor
  • Fita de casamento na antena suja de pelo menos 3 meses
  • Caixa de lenços de papel marca Continente no tablier
  • Ponteira de escape dupla Devil (interior vermelho)
  • Águia no capot
  • Aileron traseiro tipo tábua de passar a ferro
  • Película autocolante escura nos vidros (de preferência com bolhas de ar)
  • Cão Abana-Abana no tabuleiro traseiro
  • Cachecol de Portugal no cimo do pára-brisas
  • Autocolante racing na tampa do depósito de combustível a imitar fibra de carbono com parafusos falsos
  • Faróis de nevoeiro (desalinhados)
  • 3 (mínimo) pirilampos mágicos no tablier
  • Placa no tablier a dizer "Fátima" e com a imagem de uma santa
  • Íman para segurar o telemóvel
  • Autocolante Milupa "Crianças a bordo"
  • Autocolante negro no faróis da frente com dois buracos redondos
  • Capa para o volante com cores berrantes
  • Capas para os bancos com bolas de madeira
  • Letras dos pneus pintadas de branco
  • Extintor (avariado) debaixo do banco
  • Terço pendurado no retrovisor
  • Porta CDs na consola
  • Alhetas nas escovas limpa pára-brisas
  • Ventoinha (não muito grande) no tablier 
  • Faróis traseiros pintados de preto
  • Autocolantes na traseira sentido obrigatório (esquerda) e sentido proibido (direita)
  • Ferradura na grelha presa com arame de enfardar
  • Suporte para reboque com bola de ténis verde
  • Pintar o espaço da coluna entre os vidros de preto
  • Pequeno espelho para o ângulo morto
  • Almofadinhas para o cinto de segurança vermelhas
  • Bloco de notas com ventosa e caneta Bic (pode ser laranja ou cristal) presa por uma mola
  • Fita anti-electricidade estática a pelo menos 5cm do chão
  • Naperon rendilhado no tabuleiro traseiro
  • Coisa feita em renda para o tabuleiro traseiro com um rolo de papel higiénico dentro

Thursday, April 14, 2011

É uma software house portuguesa concerteza!

Há coisas que me fazem confusão. Uma empresa com dez programadores e não usa source control?? Com vários milhares de loc (lines of code)?

- "Source control só complica, nós fazemos uns ZIPs..."
- "Bug tracking? Vamos mandando uns emails..."
- "Ambiente de desenvolvimento? Ambiente de testes? O que é isso? Nós vamos ao produtivo e alteramos..."
- "Rollback? O que é isso?"
- "Backups? Ah e coiso, de vez em quando faço uns ZIPs..."
- "Eu sei lá se dá para fazer restore a partir de um ZIP. Nunca foi preciso..."
- "Onde guardo os ZIPs de backup? Estão lá num directório na mesma máquina..."
Começo a explicar o que é source control:
- "branches? tags? Ui isso é muito complicado!"
- "Deployment? Então, copio para lá os ficheiros que foram alterados!"
- "Versões? Tenho file_v1.pl, file_v2.pl, file_v3.pl e vou mudando os nomes..."
- "Bateria de testes? Então, o programador faz sempre um teste ou dois quando está a programar..."
- "Testes regressivos? O que é isso??"
- "Coding standards? O que é isso?"
- "Como é que quer que eu saiba quando, por quem e porque razão esta linha de código foi alterada?"
- "Levantamento de requisitos? Troca-se uns mails com o cliente..."
- "Especificação? Para quê? Faz-se o software e logo se vê se era aquilo que o cliente queria..."
- "Claro, o programador é que desenha o user interface..."
- "Design? Para quê? O programador que escolha umas cores que fiquem bem..."
- "Gestão do projecto? Então, os programadores dividem as coisas entre eles. Depois vão à reunião com o cliente para saber o que falta..."
- "Como é que quer que eu saiba se o projecto está ontime? Na deadline logo vemos se está tudo feito ou não..."
- "Qualidade de software? Só tenho aquele papel ali na parede de HST, é isso?"
- "Bugs fechados? São aquelas coisas que o cliente já não chateia mais..."
- "Se este projecto dá lucro? Sei lá. Os programadores trabalham das 9-5 em tudo. No fim do ano a contabilidade diz-me se tive lucro"
- "Orçamento? Então, calculo a olho na primeira vez que converso com o cliente..."
- "Milestones? O que é isso?"
- "Arquitectura do sistema? O que é isso?"

As empresas de outras áreas (não de software) também trabalham assim?

Wednesday, December 15, 2010

Primeira pessoa com HIV curada

Man Officially Cured of HIV
http://gizmodo.com/5713498/man-officially-cured-of-hiv


For the first time, a man has been declared officially cured of HIV. The remedy may nearly have killed him, but it opens a door—just a crack—to hope that we may someday kill off the scourge for good.


Strangely enough, the diagnosis that most concerned Timothy Ray Brown in 2007 was acute myeloid leukemia. HIV has been increasingly thought of as a manageable disease, though certainly a terribly burdensome one. What brought the 42-year old Brown under the care of Germany's Charite Universitatsmedizin Berlin hospital was the more immediate threat his cancer posed.


ler mais

Saturday, December 11, 2010

The problem with quotations...

“The problem with quotations that you see on the Internet is that it is difficult to discern if they are genuine.”
-- Abraham Lincoln