16 Julho 2008

Nós não somos Recursos!

A lista dos artigos mais interessantes que li este ano, com certeza inclui este, escrito pelo Mark Turansky no DZone. Segue abaixo a tradução do texto:

Nós não somos "Recursos!"

Recursos. É um termo de desumanização e também errado para praticamente qualquer profissão em que eu possa pensar.

Planejamento de projetos requer estimativas e prazos. Não tenho problema com isso exceto quando trata pessoas como peças substituíveis (nota: COGS). Num processo manufaturado, trabalhadores habilidosos podem ser substituíveis. [...] O processo pode ser perfeitamente trabalhado num número exato de passos para construir alguma coisa. Leia o Modo Toyota para ter uma melhor noção de como as indústrias globais alcançam isto.

Estes não são "Recursos!"

Mas há diversas profissões que não podem e não devem atingir este tipo de processo, onde trocar um recurso por outro não é sensível.

O Chicago Bulls contratou um "recurso de arremessar bem" ou eles tiveram o Michael Jordan?
A Apple estava bem quando tinha apenas um recurso "CEO" ou só melhoraram depois que Steve Jobs voltou ao cargo?
Você prefere ter um médico com 1 ano de experiência ainda na faculdade, para fazer a sua cirurgia no cérebro, ou prefere o especialista na área?
Você quer um recurso "Ator" ou teria o Brad Pitt maior poder de chamar atenção para seu filme?
Quando foi a última vez que você procurou uma construtora qualquer para reformar a sua casa, ao invés de chamar a melhor do mercado?
A Seleção Brasileira de Futebol ganhou 5 copas porque tinha o mínimo de jogadores necessários para formar um time, ou porque já teve na sua escalação Pelé, Falcão, Ronaldo, Ronaldinho e Romário?

Trabalhadores que precisam pensar e de criatividade, não são diferentes. Engenheiros de Software são simultaneamente criativos e lógicos, e há uma diferença em ordem de magnitude entre os bons programadores e os péssimos programadores (leia o Peopleware se você não acredita nisso). Graças a esta diferença, estimativas devem ser modificadas baseadas nestes "recursos", o que significa que não somos "cogs" substituíveis.

É o time, estúpido!

Você pode me escalar para ser o homem da terceira base do Yankees (deste modo, salvando dinheiro na balança Custo-Tempo-Qualidade), mas certamente tenho a qualidade de um produto que sofrerá devido ao fato de que joguei poucas ligas de baseball quando era criança. Similarmente, você pode me escalar para seu filme, mas não tenho certeza se ajudarei a vender bilhetes. Também não seria a pessoa ideal para dirigir a Apple, e com certeza você não iria me querer como seu cirurgião cerebral.

Talento importa.

Organizações vencedoras constróem times vencedores, eles não agendam recursos e eles não desfazem times vencedores. Elas pagam grandes valores para grandes profissionais sabendo totalmente que é talento que faz um time vencedor.

O livro Rapid Application Development de Steve McConnell, coloca no ranking o termo "Weak Personnel" (um fraco Recursos Humanos) como o segundo erro clássico que uma empresa pode cometer quando está construindo um software. [...]

Talento importa. Tratar desenvolvedores altamente qualificados como apenas "recursos", é humilhante, desumano, e ultimamente anti-produtivo para uma organização que precisa construir e manter times vencedores.

Artigos complementares
ICSE Peopleware Panel Session
Teamicide Revisited

Nota, por Bruno Borges:
Não basta o RH trocar uma palavra e achar que os profissionais se sentirão melhores. "Recurso", "colaborador" ou "funcionário" são sinônimos no contexto deste artigo.

[]'s

Link para este post

15 Julho 2008

Prepare-se para o JustJava 2008

Dicas10 a 12 de Setembro de 2008
São Paulo - SP
Chamada de Trabalhos
http://www.sucesusp.org.br/justjava2008/

Hoje o JustJava já está em sua 7a edição. E desde 2003, o evento é um sucesso no Brasil. Veja alguns pontos altos que se pode encontrar:

  • Muitas palestras técnicas e de boa qualidade (ok, já teve algumas ruins também)
  • Muita troca de experiência e cultura de trabalho (networking!)
  • Discussões sobre um tema nas muvucas, onde tinhamos até uma cerveja para acompanhar (hoje vai ser difícil com a nova lei de transito)
  • Aprender novidades, com outros feras no assunto

Então veja abaixo, um pouco mais sobre um PR do evento e o convite para submeter palestra.

O Evento

O JustJava é um evento técnico, feito por brasileiros, para brasileiros, e apresentado por desenvolvedores, para desenvolvedores!

O objetivo do evento é mostrar o que esta está acontecendo no mercado Java no Brasil, quais são os projetos Java mais importantes, como o desenvolvedor brasileiro tem usado a tecnologia, e principalmente, incentivar a integração daqueles que fazem a tecnologia Java crescer no Brasil - os desenvolvedores.

Você não pode ficar de fora do JustJava - o Evento Java da Comunidade Brasileira, e o grande evento de Java do ano no Brasil.

O JustJava, já na sua sétima edição, é o principal evento técnico realizado pela Sociedade de Usuários Java, um dos mais ativos grupos de usuarios Java do Brasil. Na primeira edição, o JustJava foi o maior
evento de Java realizado ate então no Brasil!

Venha ser um palestrante

Se você quer apresentar uma palestra no JustJava, o momento de submissao é agora. Ate o dia 18 de julho, estaremos recebendo e avaliando as palestras para compor e montar um evento técnico de alta qualidade.

Se você tem um projeto inovador e quer mostrar suas soluções criativas para os problemas encontrados, se você quer aprofundar as discussões sobre a tecnologia Java, seja um palestrante no JustJava.

Para submeter sua palestra, preencha o formulário que se encontra no site abaixo, na opção "Chamada de Trabalhos"

http://www.sucesusp.org.br/justjava2008/

Outras informações

http://www.soujava.org.br/display/v/JustJava+2008

Link para este post

02 Julho 2008

O segredo da Nokia

O site Gizmodo escreveu sobre um segredo que a Nokia (NOK) promete lançar na próxima Segunda-feira, dia 7 de Julho às 5 AM (provavelmente, horário local da Finlândia).

Como diz o Gizmodo, a Nokia realmente conseguiu chamar a atenção com este site. O hotsite é sinistro, bizarro e curioso. Diz a Nokia que será algo estranho e jamais visto até a data do lançamento. Parece que para acessar o conteúdo na data do lançamento, será necessário descobrir - e juntar - algumas informações a respeito da invenção da luz por Edson, o avião dos irmãos Wright e a Apollo 11.

Já assisti ao video-conceito do celular Morph, mas duvido que seja este o lançamento que eles prometem fazer, já que o video-conceito está muuuuuiiito para conceito. Mas, é a Nokia...

Segue minhas suspeitas:

  • Um skin-cellphone (parecido com o Morph, mas real)
  • Um SDK para o Symbian OS
  • Um celular com nanotecnologia (vai que eles conseguiram?!)
  • Um celular sem teclado, mas com uma patcha funcionalidade de vídeo, voz, reconhecimento de gestos e diabo-a-quatro (iPhone killer)
Ficou curioso? Acesse... ou melhor: Open at Own Risk. E diga, quais as suas suspeitas? Comente! :-)

[]'s

Link para este post

iPhone, problemas e clone de cachorro

Então você foi um daqueles apressados que comprou um iPhone antes mesmo de uma empresa brasileira oficialmente lançá-lo no Brasil. Legal, bacana... você desbloqueou e habilitou seu chip da TIM/Claro/Vivo/BrT ou Oi! nele. Show de bola. Apesar de mesmo você saber que o iPhone não é o melhor celular do mercado, você se encantou com a sua beleza, seus efeitos, gráficos e até a frescurinha do toque de tela. Apesar de você não ter se importado com o fato de ele não ser 3G nem com a falta de flash na câmera ou sua baixa resolução, achou ele sexy e pop, gostou da idéia de ter um celular sem teclado e poder girar no ar e ver a imagem ser orientada automaticamente. Você tanto não ligou para tantos detalhes, que também não se importou com o detalhe do preço: pagou o que tinha que pagar para trazê-lo do exterior.

Agora você possui um iPhone que não é 3G, comprado no exterior, sem contrato com uma operadora brasileira e sem uma nota fiscal legítima de contrato com a Apple. Meus pêsames, mero mortal. Você é só mais um que compra lançamentos para querer aparecer no colégio com o último hype do mercado, ou no trabalho mostrar cada detalhe inútil que você encontra no aparelho. Passa horas no café brincando com seu iPhone à espera de algum curioso aparecer e perguntar-lhe: "Nossa! Um iPhone! O que tem nele?" e você poder mostrar-lhe a gata que limpa a tela ou a pipoca estourando para depois ser comida num patético efeito de ótica.

Agora meu amigo, você possui um iPhone que não é 3G, sem contrato e sem qualquer utilidade. Não adianta chorar na Claro ou na TIM - operadoras com maiores chances de lançar o iPhone 3G no Brasil - pois elas não vão trocar seu aparelho pelo novo. Agora meu amigo, você possui um junk gadget. Enquanto outros - mais inteligentes e pacientes - comprarão um modelo melhor, e com contrato para futuras trocas, você se pergunta: "O que farei com meu Junk iPhone?". O site MacWorld responde:

  • Calço para aquela mesa da sua avó, penca (a mesa, não a sua avó!), na sala
  • Isca para assaltantes - deixe no carro para caso um ladrão apareça. "Pode levar!!"
  • Espelho para a sua namorada retocar a maquiagem
  • Peça para gerar conversa - "Ei... isso daí é aquele iPhone antigo?!?!"
É meu amigo. Você pensou que era o esperto... Esperto é o Steve Jobs que já sabia há muito tempo que ele mesmo lançaria um 3G. Ou você acha que nos laboratórios da Nokia já não exista um skin-cellphone?

Deveriam fazer alguma coisa sobre todos os problemas
Ao invés de clonarem cachorros por ae...

Enquanto lia um artigo, o autor mencionou um outro artigo escrito em 21 de agosto de 1996. O site The Onion escreveu sobre os problemas do nosso dia-a-dia. Por que ninguém resolve as coisas mais simples da vida?! Assim que terminei de ler, atualizei meu Google Reader e li esta notícia: Cachorro que ajudou a achar vítimas do 11/09 será clonado nos EUA.

Sério... o que leva a empresa BioArts International a clonar um cachorro de 15 anos com problemas degenerativos?!
De acordo com a empresa, especialistas acreditam que sua condição pode estar ligada ao tempo que ele ficou em contato com os gases tóxicos do local do atentado.
É um problema degenerativo nas patas traseiras. Ele tem 15 anos, pelo amor de Deus!! Até parece que uma poeira iria afetar a pata de um cachorro!!

Porém, lembro-me agora de quando assisti ao filme Sicko do Michael Moore. Lá, uma pessoa (não um cachorro) do 11/9 aparece com problemas respiratórios, graças à poeira da destruição, enquanto ela resgatava sobreviventes. Mas ela custou a encontrar ajuda do governo ou de empresas/hospitais particulares. Como é dito no The Onion:
We're living in a time with super computers and underwater sea stations and million-dollar laboratories. And still, everyday when I watch the TV news shows I see all sorts of problems! [...] So many people are dying in the world. We have laser surgery, don't we? Isn't somebody using that? They put a baboon heart in a human, you know. They can make body parts out of plastic and put little camera probes in your body. Then why are there so many people dying?
É triste isso. Sério. Clonar um cachorro?! Pra quê ?!?! Por que não ajudam com as famílias pobres de New Orleans que ainda sofrem com o Katrina, ou não usam toda essa tecnologia via satélite e acabam logo com as plantações de coca na Colômbia? Ou então melhoram o transporte das cidades caóticas como São Paulo. Sério. Alguém deveria parar de resolver problemas inúteis e olhar para os verdadeiros problemas do nosso dia-a-dia - da humanidade.

E você, quais problemas no seu dia-a-dia gostaria que a Física Quântica, ou o supercomputador da IBM, ou ainda a NASA resolvesse? Comente... :-)

Ah... já decidiu o que fazer com o seu iPhone? Problemão esse, não?! :-P

[]'s

Link para este post

30 Junho 2008

Cache do Wicket em Cluster: entenda o processo


Muita gente quando descobre que o Wicket guarda tudo na sessão do usuário, rapidamente lança duas perguntas de grande peso:

  1. Guardar tudo no HttpSession não estourará a memória do servidor?
  2. Não ficará lenta a replicação destes objetos entre os nodes de um Cluster?
Para começar, é verdade sim, que o Wicket guarda tudo... tudo... na sessão do usuário. O objeto HttpSession é alimentado a cada click do usuário com as instâncias das páginas (e toooodas as suas versões anteriores - Suporte Backbutton), assim como os dados destas páginas, de formulários, estados de componentes (visível, escondido, selecionado, etc) e tantas outras informações forem necessárias. Mas, não se preocupe. Assim como o Garbage Collector se encarrega de cuidar da memória da VM, o Wicket (>= 1.3) se encarrega de cuidar da sua "memória". Para isso, existe o DiskPageStore.

Antes de continuar, explicarei agora os motivos que levam o Wicket a funcionar desta forma (enxer a memória). Se você já sabe, então pule dois parágrafos. :-)

O Wicket armazena na HttpSession as instâncias da página primeiramente para que quando você, desenvolvedor, construir uma página ou um componente, sinta-se num ambiente verdadeiramente Orientado a Objetos. Diferentemente dos frameworks action-based, aqui é possível manter referências de objetos, variáveis locais e de instância, declaradas sem qualquer problema pois quando o usuário clicar, o objeto que receberá o evento, é o mesmo que foi criado no início. Ótimo não? Sem dúvida! Não precisa-se saber de "parâmetro do request" ou qualquer outra tranqueira Web. É Swing-like, Java puro, POJOs e até parece desktop de verdade.

Pois bem, com os objetos na HttpSession, foi possível implementar algo ainda mais bacana: suporte ao backbutton do browser. Cada vez que o usuário submete alguma coisa a um componente, o estado deste componente é guardado na Session, como uma versão. É como se fosse feito um snapshot. Se o usuário clicar em voltar, e submeter alguma coisa novamente, o Wicket tem como saber que alguma coisa ali está diferente e poderá evitar problemas como submissão duplicada de registro, ou atualização indevida de dados já existentes. Maravilha!

E então você pensa: "que ótimo, Wicket me dá várias funcionalidades a troco de uma sessão de 15Megabytes por usuário". É verdade que se não houver um cuidado, a sessão pode explodir sim. Aqui vão algumas regras então para minimizar os riscos de uma HttpSession Shrek: Como funciona o SecondLevelCacheSessionStore?
Agora, a parte que nos interessa: Wicket's Garbage Collector!

O "lixo" que o Wicket precisa remover é basicamente, versões antigas das páginas/componentes criados pela navegação do usuário no site. É possível, mas pouco provável, que o usuário clique num Voltar e tente fazer algo. Por isso o framework elimina versões muito antigas (o padrão é manter somente as últimas 5 em deployment mode). Mas e se o desenvolvedor quiser armazenar mais versões, sem comprometer a memória do servidor, e conseqüentemente proteger sua aplicação de ataques Denial of Service? Para isso serve o SecondLevelCacheSessionStore.

Sua utilização depende do arquiteto do sistema em definir no Application do Wicket, que o framework deve utilizá-lo. Porém, antes de apresentar o código, vamos entender como os objetos são persistidos. A persistência é feita por algum objeto que implementa a interface IPageStore. Este objeto será responsável por persistir - storePage() - seja em banco de dados, arquivo flat ou qualquer outro meio, os objetos que o framework considerar não mais necessários na sessão, ou quando o usuário precisa ver algum dado mantido em versão anterior de algum componente - getPage().

A implementação padrão para a interface IPageStore, é a classe DiskPageStore. Nela, ocorre o processo de serializar as páginas e toda a árvore de objetos ali contida, para posteriormente salvar no disco do servidor. Problema de memória gigante resolvido! Mas... pera. Você possui um cluster? Hmm... Será que o Wicket vai funcionar sem problemas ali? Se ele arquivar as páginas no disco de um servidor, o que acontecerá em outro nó do cluster?!

Wicket em ambiente Clusterizado
A grande sacada...

Serialização é um processo complicado e lento. Não falei antes, mas é importante lembrar que todos os objetos que ficarem na HttpSession, devem implementar Serializable. Isto é importantíssimo; se houver um não serializável, o Wicket vai gritar no log. Agora, se tudo correr bem, os objetos serão serializados e persistidos no disco pelo objeto DiskPageStore, estando o aplicativo Wicket em cluster ou não.

Num ambiente Cluster regular - que segue os padrões das configurações simples e funcionais (ex: Tomcat em Cluster) - o framework inteligentemente coloca as páginas já serializadas no processo de replicação, para que quando o objeto HttpSession chegar no outro nó, não há perda de processamento em realizar a tarefa de serialização duas vezes. As páginas também não são de-serializadas; vão direto para o DiskPageStore que as armazena para uso futuro, se necessário. Este mecanismo é o que garante a performance do framework neste tipo de deploy.

Espero poder ter desmistificado agora a idéia de que Wicket estoura com a memória dos servidores, nem tão pouco que não suporta ambientes clusterizados.

Hands-On: Configurar a aplicação para utilizar SecondLevelCacheSessionStore
Mão na massa...

Para encerrar, veja como é simples configurar o SecondLevelCache com o DiskPageStore:
public class MyApp extends WebApplication {
@Override
protected ISessionStore newSessionStore() {
return new SecondLevelCacheSessionStore(this, new DiskPageStore());
}
}
E agora, que tal? É fácil ou não é?! :-D

PS: o Anjo Negro ataca novamente... desta vez, com gol de letra!

[]'s!

Link para este post

25 Junho 2008

URLs simples no Wicket e o novo Eclipse

Uma das coisas bacanas no Wicket é a possibilidade (extremamente simples) de definir URLs RESTful, ou apenas "URLs simples" para as páginas do sistema.

No artigo Wicket Creating RESTful URLs é possível ver como o framework provê de forma bem objetiva, na API, esta funcionalidade. Mas, resumindo: se você quer definir URLs mais amigáveis, diferentemente dos padrões do framework, que são mais ou menos assim:

http://www.example.com/wui/?wicket:bookmarkablePage=%3Anl.stuq.demo.SomePage
É possível deixá-las assim:
  • http://example.com/users/
  • http://example.com/users/{user}
A facilidade de desenvolver, em puro Java, com este framework é o que faz a diferença dentre tantos frameworks Web. O padrão ZeXCo, ou apenas... Zero-XML-Configuration, mais uma vez mostra-se eficáz.
  public WicketApplication() {
Class pageClass = ProductDetailPage.class;
String[] params = new String[]{"id"};
MixedParamUrlCodingStrategy productURLS = new MixedParamUrlCodingStrategy("products", pageClass, params);
mount(productURLS);
...
Isto é o suficiente para acessar a página desta forma: http://example.com/products/23. Onde: "products" indica a página e "23" é o id passado via parâmetro para a classe. Agora, como interceptar este parâmetro? No construtor da página é preciso receber o objeto PageParameters:
  public ProductDetailPage(PageParameters params) {
String id = params.getString("id");
Product product = productService.loadById(id);
setModel(new CompoundPropertyModel(product));
...
}
Pronto! Agora as URLs estão beeeeem bonitinhas... :-P


E para terminar o post, recebi o e-mail agora sobre o anúncio do lançamento do Eclipse Ganymede (nome meio ... gay, não? - mas para os curiosos, Ganymede é uma lua de Júpiter). O pacote oferece um release único e integrado de 23 projetos da Eclipse Foundation.

Há também um concurso para os melhores blogs que postarem sobre o Ganymede; não adianta ser apenas um comentário; o que eles querem mesmo são reviews bem detalhadas... eu to fora! Mas se você quiser participar, acesse a página Ganymede Around The World.

É isso. Agora, é fazer o download do Eclipse Ganymede, do Apache Wicket 1.4m2 e desenvolver aplicações Web com maior produtividade, qualidade e diversão! :D

[]'s

Link para este post

22 Junho 2008

Aspirante de fotografia nas horas livres

Trago a público uma seleção fotográfica das imagens que realizei nos últimos 6 meses, a partir do momento que adquiri a minha querida Aganov. Apesar de serem poucas imagens, a verdade é que por trás disso há um acervo com mais de 4 mil fotos. Às vezes chego a fazer 15 fotos da mesma cena, até acertar a imagem (que considero) ideal, tudo isso para seguir um estilo 98% purista, sem Photoshop ou filtros de lente (às vezes, aplico um Sharpen, devido às limitações da câmera). O engraçado é que geralmente é a primeira tentativa que sai melhor (meu amigo Pablo percebeu isso quando fomos à Europa em Dezembro de 2007.)

Bem, a intenção de mostrar as fotos é, na verdade, de solicitar aos amigos que visitam este blog, e aos estranhos que corajosamente clicam nos links de outros sites até chegar aqui, para que comentem as imagens. Peço somente por gentileza, que os comentários sejam diretamente nas fotos, armazenadas no Picasa Web (abaixo de cada imagem há um espaço dedicado para comentários.) Caso alguém não consiga comentar lá (ou não queira), também pode fazer pelos comentários deste post, ou então por e-mail. Gostaria muito de saber a opinião de vocês.

Seleção Fotográfica


Quem sabe um dia abraço a idéia e viro fotógrafo? :-)

[]'s!

Link para este post

19 Junho 2008

HP inicia desligamento de profissionais da EDS

Extra! Extra! HP compra a EDS! ... Você não soube disso?! Ora, em que mundo você vive? :-) O mercado de TI está super aquecido. É o Yahoo! com quedas consecutivas no valor de suas ações, a Microsoft tomando na cabeça com (outro tipo de) ações: anti-truste; o Google dominando o mundo (que logo logo, comprará o Yahoo! - só está à espera de um preço justo nas ações... aguarde).

Bem, notícias antigas e previsões deixadas de lado, a última notícia é que o óbvio aconteceu: a HP ordenou o fechamento de escritórios da EDS. Por enquanto, o primeiro de que tenho notícias é aqui no Brasil. O escritório da EDS em Florianópolis encerrará suas atividades nos próximos 2 meses. Bom para a HP, bom para o mercado, péssimo para os profissionais de Florianópolis, que irão saturar o mercado local que hoje conta com pouca oferta de trabalho. Resultado: salários baixos para a área de TI na Ilha da Magia. Mas será que isso é realmente bom para o mercado?

É triste ver a cidade com o maior potencial tecnológico hoje no Brasil, ter ótimos profissionais sendo mal remunerados por empresas que instalam na ilha somente as equipes de desenvolvimento, enquanto negociam em São Paulo, Rio de Janeiro, Brasília e no exterior, contratos exorbitantes sem valorizar justamente seus profissionais. Se você não conhece, o mercado de Florianópolis oferece hoje uma média salarial de R$ 2.500,00 para desenvolvedores Java Pleno. Achou muito? Talvez se você acabou de sair da faculdade e possui 1 ano de experiência com a tecnologia, pode parecer. Mas acredite, em outras cidades com custo de vida similar ao de Florianópolis (Rio, Sampa e Brasília), este profissional atinge salários de até R$ 5.000,00, com média de R$ 4.500,00. Hmmm... quase 100% a mais!! Isso significa que se você trabalhar para uma empresa em Floripa que fecha contrato em São Paulo, esta empresa possui um faturamento quase 100% maior que as outras. Acha justo? Ilegal não é, é verdade. Mas se o profissional sabe que recebe um salário injusto, trabalhará desmotivado e estará constantemente em contato com outras empresas para melhorar seu salário: emprego temporário foi o que você, empresário, deu a ele.

Estas empresas com frequência reclamam da dificuldade de encontrar bons profissionais, e quando encontram querem oferecer salários de mercado ou até mesmo abaixo disso. Pessoal do RH, aqui vai uma dica: ofereçam salários justos para os profissionais e vocês não terão que anunciar a vaga novamente após 6 meses, quando este profissional receber uma oferta melhor. Outra dica ao pessoal de RH: dêem reajustes salariais anualmente, quando vocês possuem dinheiro em caixa para uma nova contratação com teto salarial superior autorizado pela gerência: é melhor manter um bom profissional do que ter que adaptar um novo ao ambiente da empresa.

Os profissionais da EDS atendem um nicho de mercado aquecido: desenvolvedores Java, Cobol, .NET; DBAs Oracle, gerentes de projetos e analistas. É possível ter um time completo para um novo projeto com estes profissionais - todos muito bem qualificados. Se você que lê este blog é de algum RH, entre em contato comigo que farei ótimas indicações. Se você é profissional da área e está em Florianópolis, cuidado com as ofertas: não aceite qualquer barganha. =)

[]'s!

Link para este post