Archive for August, 2007

iPhone desbloqueado e funcionando no Brasil

Wednesday, August 29th, 2007

Acabo de receber a notícia de que o Antônio Carlos conseguiu desbloquear o seu iPhone para funcionar no Brasil com a operadora TIM! Este é provavelmente um dos primeiros iPhones desbloqueados no país (o segundo que eu tenho notícia, atrás apenas do Marcello Azambuja).

Ele disse que em breve disponibilizará mais detalhes no seu blog e por enquanto você pode ir conferindo a prova desta façanha.

Conversando com o Antônio e o Marcello hoje de manhã eles me disseram que o processo é bem delicado (mais detalhes em http://iphone.unlock.no) e que qualquer descuido pode fazer com que o telefone vire um belo peso de papel de 500 dólares.

O Marcello prometeu colocar em breve no site dele todo o processo de desbloqueio explicado de forma detalhada, com muitas fotos e algumas melhorias no tutorial original.

E eu que estava pensando em comprar um Nokia E61 já estou reavaliando minhas intenções… :)

Mock Objects em excesso podem atrapalhar

Tuesday, August 28th, 2007

Acabo de ler na Artima um artigo sobre o uso excessivo de Mock Objects.

Fazer testes unitários pode não ser a tarefa mais fácil do mundo quando suas classes dependem de sistemas externos que você não controla como banco de dados, webservices e qualquer outra coisa que não faz parte do seu sistema. É aí que entram os Mock Objects, que são objetos que servem para “simular” as dependências das suas classes. Eles possuem comportamento controlado e fazem exatamente o que você definir, tornando os resultados das chamadas às dependências de um código totalmente previsíveis. Sabendo que todas as dependências estão funcionando corretamente, qualquer falha que aconteça nos testes está com certeza no local (método, classe, etc) testado.

O problema é quando decide-se simular todas as dependências. Isso é um pouco controverso porque na verdade quando você está fazendo testes unitários o certo mesmo é isolar o método e “mockar” todas as dependências. Porém em alguns casos isso acaba fazendo com que o teste fique muito complexo e difícil de ser entendido e mantido.

Além disso os testes com muitos Mocks podem acabar ocultando problemas na colaboração entre os objetos. Os objetos dependentes em uma determinada situação podem funcionar diferente de como foram “mockados” e pode ser interessante utilizar os objetos reais. Mas neste caso os seus testes seriam testes de integração e não testes unitários.

Ultimamente eu tenho optado por ir pelo caminho do meio e por isso concordo quase integralmente com a opinião do Alex Ruiz. Acredito que em boa parte das vezes você não precisa criar mocks de tudo que vê pela frente.

Um exemplo real é o sistema que estou trabalhando atualmente, onde estou desenvolvendo um cliente para um webservice REST. Este cliente é bem magro e basicamente ele pega XMLs de coisas que foram processadas no servidor (webservice) e transforma em objetos Java. Para isso o cliente acessa via HTTP um determinado endereço, obtém um XML que representa uma entidade do sistema, transforma em um objeto Java e retorna o resultado. Como este cliente é muito magro e praticamente não faz nenhum processamento, na maioria dos testes a única dependência que eu “mockei” foi o XML retornado, já que a única coisa não controlada pelo meu sistema é o canal HTTP e o servidor dos webservices que pode estar a qualquer momento offline e meu teste não pode falhar por causa disso. Para fazer isso eu injetei no repositório de objetos um HTTP Client mock que sempre retorna um XML válido. Com isso o meu teste verifica se o cliente retorna objetos Java corretos considerando que o webservice está funcionando. É claro que este não é o único tipo de teste que eu faço, tenho testes mais específicos para outras funcionalidades mais importantes, como a classe que transforma objetos em XML para Java e por aí vai.

Resumindo isso tudo, acho importante analisar cada caso e ver se há necessidade de criar testes canônicamente corretos ou se opções mais simples podem resolver o problema da mesma forma.

Dijkstra, um grande jornalista

Monday, August 27th, 2007

Uma das moças da limpeza aqui da Globo.com cisma que eu sou jornalista! Não é todo mundo que trabalha na Globo que escreve no jornal, mas isso eu já desistí de tentar explicar.

Continuando a história, na minha baia tem uma daquelas piadinhas que só nerds entendem. Trata-se de uma foto do Edsger Dijkstra com o texto “Dijkstra is watching” (veja abaixo). Este mesmo “pôster” está pregado em várias baias do pessoal da minha equipe de desenvolvimento porque Dijkstra era um cara extremamente intolerante com idiotices e colocá-lo “olhando” para os nossos monitores é um estímulo psicológico para que não cometamos nenhuma barbaridade enquanto estamos programando, sob pena de ridicularização e humilhação em praça pública.

Dijkstra na minha baia

Obviamente nada disso faz sentido para a maioria das pessoas… Mas eu acho engraçado, além de filosófico.

Um dia desses essa moça da limpeza resolveu me perguntar quem era aquele cara que merecia estar pregado em tantas baias, e eu para não complicar muito resolví dizer que ele era o cara que “inventou” o que nós fazíamos aqui. Como ela não sabe que nós aqui na equipe desenvolvemos software, ela ficou achando que o cara também era um jornalista!

Na semana seguinte um dos meus amigos aqui da equipe veio contar que quando ele chegou uma moça da limpeza estava pregando o Dijkstra na baia dele novamente. Ele de curiosidade resolveu perguntar porque ela tinha tirado e a moça respondeu: “é porque o outro menino aqui falou que ele é muito famoso porque inventou o jornalismo, por isso tô tirando uma cópia pra levar pra uma outra conhecida minha que também é jornalista porque ela vai gostar muito“.

Se você vir algum jornalista com uma foto do Dijkstra andando por aí, já sabe o que aconteceu…

6 meses 100% Unix

Monday, August 20th, 2007

Nesta última semana (no dia 15/08) completei 6 meses de migração total da minha estação de trabalho para o Ubuntu Linux!

Tenho contato com Linux há alguns anos, desde o início do ano de 2000 para ser mais exato. Nesta época eu trabalhava numa empresa que tinha vários servidores RedHat Linux, que era a distribuição mais popular na época, além de umas máquinas Solaris. Aprendí a usar Linux facilitado pelo contato diário com todos esses servidores porém na minha cabeça aquilo alí nunca seria adequado para ser usado em um desktop.

Só passei a levar o Linux como desktop mais a sério no ano de 2004 quando conhecí pessoalmente uma empresa que funcionava 100% com Debian e Kurumin (em absolutamente todos os servidores e desktops). Qualquer software que não fosse livre era totalmente desencorajado. Pela primeira vez eu estava vendo o Linux sendo usado para absolutamente tudo no dia a dia de uma empresa (que me parecia utópico) e comecei a acreditar que seria possível trabalhar bem e fazer tudo que se fazia no Windows utilizando somente software livre.

No fim de 2004 mesmo fiz uma tentativa frustrada de usar um desktop Linux (Mandrake). Como falei foi totalmente frustrada porque o meu hardware era muito novo e nem um pouco comum pois eu havia comprado todos os últimos lançamentos da época. Tive uma dificuldade enorme de achar drivers. A resolução do meu monitor ficou péssima e a placa de som não funcionava. Além disso o Open Office não abria direito planilhas feitas no Microsoft Office e vice e versa. Duas semanas depois quando ainda estava lutando para fazer minha placa de som funcionar acabei deletando sem querer o /etc! Para quem não sabe, isso significa que eu deletei todas as configurações do sistema e a máquina simplesmente nem ligava mais!

Foi quando eu decidí que ia comprar um iMac. O Mac OS X (sistema operacional da Apple) tem todo o poder do Unix aliado a uma interface incrível. Foi a melhor coisa que poderia ter feito. Ele é suficientemente fácil para que a minha esposa possa usá-lo e ao mesmo tempo extremamente poderoso para que eu possa desenvolver, instalar, compilar e tudo mais que eu preciso. É claro que por não ser o sistema operacional mais popular do mundo tive algumas dificuldades mas nem se compara ao inferno que eu vivia.

Só que no trabalho eu ainda usava o Windows e tinha que conviver diariamente com todas aquelas mazelas de vírus, spyware, telas azuis, travamentos, pop-ups mortais, alto consumo de memória, lentidão, etc. Durante muito tempo todo o meu kit de trabalho foi Windows e eu sempre pensava que nunca seria possível ter todas aquelas mesmas ferramentas em um Linux, o que sempre me levava a descartar qualquer tentativa de migração.

Depois de algum tempo e um pouco mais experto pela quantidade de problemas vividos e resolvidos, tomei coragem e novamente me forcei a trocar meu desktop principal para Linux, dessa vez para o Ubuntu (desktop principal = que eu uso mais = do trabalho). Me proibí de usar Windows e decidí que se eu tivesse um problema não importa qual fosse eu iria parar e resolvê-lo não importa quanto tempo levasse.

Confesso que foi complicado porque tive que fazer com que a minha (quase) solitária máquina Linux funcionasse perfeitamente e de forma transparente num ambiente totalmente Windows. Introduzir uma máquina de desenvolvimento Linux num ambiente com duzentas máquinas Windows não é tão fácil. Todas as convenções da empresa se baseiam em estações Windows e eu tive um certo trabalho para “portar” tudo isso. Nada muito complicado mas levou um tempo e deu um certo trabalho. Mesmo com todos os problemas fiquei impressionado como foi tudo muito mais fácil de configurar e instalar desde minha última vez. Não só no Ubuntu como no Fedora, que era minha segunda opção.

O mais legal disso tudo foi que, ao provar que é totalmente possível desenvolver em Java no nosso ambiente Vignette com Linux e software livre, acabamos gerando uma reação em cadeia dentro da empresa. Claro que eu não fiz nada sozinho, várias outras pessoas já usavam desktops Linux na empresa. Minhas contribuições foram apenas em mostrar que dava para fazer tudo que os desenvolvedores Java da empresa precisavam no Linux e em aliciar vários outros desenvolvedores Java a fazer parte do movimento. E o movimento cresceu tanto e ficou tão sério que a empresa já tem um projeto oficial para migrar todas as estações para Linux!

Firefox é mais popular entre os desenvolvedores

Thursday, August 16th, 2007

Ultimamente um dos meus passatempos prediletos é ficar navegando no Google Analytics do meu blog e de outros sites que tenho e/ou administro (o Tiago também se amarra, eu não sou o único louco). Para quem não sabe o Google Analytics é uma ferramenta que gera estatísticas de acesso diversas de um site, como por exemplo: a quantidade de visitantes por período de tempo, sistemas operacionais e browsers mais utilizados, palavras mais buscadas e várias outras coisas mais, tudo disposto de forma organizada e com gráficos bem bonitinhos.

Analisando estas informações percebí que, enquanto em alguns sites de entretenimento da minha empresa aproximadamente 10% dos visitantes usam Firefox, no meu blog 70% dos visitantes usam ele!

Todos os meus amigos desenvolvedores (ou quase todos) usam o Firefox. Sem brincadeira, hoje em dia praticamente ninguem cogita a hipótese de usar Internet Explorer mais. O Toninho (gerente da minha área) até brinca que vai mandar embora quem não estiver usando o Firefox.

Em compensação, das 10-15 pessoas da minha família ou conhecidos próximos que perguntei, nenhuma delas sequer tinha ouvido falar do Firefox. Nem o meu irmão que tem 20 anos e é mais espertinho conhecia. A única que conhece é a minha esposa (que aliás é o meu orgulho porque é a única mulher que eu conheço pessoalmente que sabe usar Linux, Mac e Windows/Safari, Firefox, IE, Opera, Camino e mais algum que eu possa ter esquecido… – não que ela goste dessas coisas mas como sou eu que administro o departamento de TI da nossa casa, ela tem que usar o que eu decido que é bom).

Dá para perceber que as pessoas leigas acham que internet = Internet Explorer. Em compensação as pessoas com um pouquinho mais de conhecimento já entendem os problemas de segurança e bugs do IE e por isso usam o Firefox.

Isso tudo de certa forma explica o porque dos números do meu blog serem completamente diferentes de um site de entretenimento. O público alvo do meu site são desenvolvedores e o público alvo de um site de entretenimento é… qualquer pessoa!

Alguém aí pode passar suas estatísticas para compararmos?

Ambiente descontraído parte 2 – desenvolvimento ágil

Thursday, August 16th, 2007

O Phillip Calçado escreveu um excelente post no blog dele sobre como funciona nossa equipe de desenvolvimento ágil.

Isso é uma prova viva de que um ambiente de trabalho não precisa ser aquela chatice que todo mundo está acostumado. Você pode deitar no trabalho, pode jogar video game, pode ouvir heavy metal nas alturas e mesmo assim fazer um trabalho sério produzindo software de alta qualidade.

Nos últimos tempos temos experimentado várias práticas de desenvolvimento ágil que têm tornado nossos projetos muito mais produtivos e divertidos. O Phillip faz neste post um resumo muito bom das principais coisas que aconteceram na nossa equipe nos últimos 2 meses mostrando várias fotos e explicando alguns detalhes do processo.

Ambiente descontraído 101: mapeamento de mesa

Tuesday, August 7th, 2007

O Toninho inventou a brincadeira mais legal dos últimos tempos: mapeamento de mesa! Trata-se de mapear as “curiosidades” das mesas dos sujeitos e tudo mais que está em volta.

Veja o mapeamento da minha mesa e o mapeamento da mesa do Phillip Calçado pra entender essa doideira!

Quem vê isso acha que nós somos um bando de vagabundos mas a verdade é que o ambiente de trabalho descontraído aqui da nossa empresa colabora muito com a produtividade das pessoas. Agora eu vou jogar um pouco de Wii. Haha!

Being Agile is our favourite thing

Thursday, August 2nd, 2007

Acabei de receber um e-mail do Carlos Villela com um vídeo muito bom da ThoughtWorks, empresa onde ele trabalha.

Não entendí muito bem se isso é um comercial (parece) ou se é só um vídeo aleatório. O caso é que eles pra variar mandaram muito bem e produziram o vídeo tosco mais legal dos últimos tempos, além de ser extremamente educativo! Confira e preste atenção na profundidade das palavras: