terça-feira, 31 de janeiro de 2006

Java Black Belt

Para aqueles que gostariam de testar suas habilidades em Java, dê uma olhada no seguinte portal:

JavaBlackBelt - Java skills evaluation platform

JavaBlackBelt é uma comunidade que oferece a oportunidade de medirmos nossos conhecimentos em Java, e de alguma forma termos nosso conhecimento reconhecido. A filosofia por trás desta idéia é de que as formas tradicionais de medirmos nossas habilidades não são capazes de cobrir toda a vasta gama de conhecimento que adquirimos. O mais interessante é que todos podem postar novas questões (avaliadas por moderadores), de forma que a comunidade pode evoluir em seus conhecimentos juntos. Vale a pena dar uma olhada.

segunda-feira, 30 de janeiro de 2006

Off topic - "Heróis de verdade"

ISTOÉ Online - Herósi de verdade

Uma amiga minha me enviou o texto da reportagem do link acima, e achei interessante dividí-lo. Ele fala sobre as paranóias deste mundo louco em que vivemos, onde a aparência é mais importante que tudo. É legal refletir um pouco sobre o que o entrevistado (Roberto Shinyashiki) fala. Uma frase muito interessante que ele cita:

(...) Ali eu aprendi que a
felicidade é feita de coisas pequenas. Ninguém na hora da morte diz se
arrepender por não ter aplicado o dinheiro em imóveis.

quinta-feira, 26 de janeiro de 2006

Liberação do portal CAPES de periódicos

Uma boa notícia para todos aqueles que lidam com pesquisa, ou têm algum interesse nisto, mas não possuem vínculo com instituições de ensino superior. O Portal de periódicos da CAPES agora está aberto a qualquer usuário da internet. Vale a pena conhecer.

Fonte: :: Agência FAPESP - Divulgando a cultura científica :: - Acesso livre pela internet

Sobrevivendo a um chefe ruim

Acho que é bastante comum nos depararmos em nossa vida profissional com um superior ruim, sem capacidade de gerenciamento, sem liderança, que nos faz pensar: "O que esse cara tá fazendo nessa posição?". E isso acaba por muitas vezes nos consumindo por dentro, atrapalhando nosso trabalho, e nos desmotivando.

Este artigo - How to Survive a Bad Boss - Computerworld - indicado por um amigo (Lazarini) na lista de mails da minha turma de graduação fala a respeito disto, e mostra a experiência de alguns profissionais experientes e de sucesso, que já tiveram que lidar com péssimos chefes, e relatam suas experiências, e o que fizeram para superar os problemas. É bastante interessante.

E você? Tem ou já teve problemas com chefes ruins? Que dica você pode dar pra nós? Deixe seu comentário.

terça-feira, 24 de janeiro de 2006

OraSchemaDoc

Em minha busca constante por melhorias no processo de documentação de minha empresa, me deparei com o problema de documentação de banco de dados. A gente acaba criando várias tabelas, com vários campos, vamos modificando tudo isso através do tempo, e acabamos perdendo o significado das coisas, pois não documentamos. No oracle, podemos inserir comentários para cada tabela e campo criado, mas é penoso ter que abrir o PL/SQL pra achar uma tabela, visualizá-la e achar o comentário de um campo. Pensei então que seria bom ter uma documentação a la javadoc pros nossos bancos. Googleando, encontrei o OraSchemadoc , uma ferramenta que faz justamente isto. Você indica o banco que você deseja documentar, e ele cria uma estrutura html com documentação das tabelas, triggers, function, views, procedures e outras coisas mais. Bastante útil para equipes como a nossa, onde as mudanças são constantes, e temos pouco tempo para documentá-las.

Para utilizar esta ferramenta você precisa ter Python (versão 2.0 ou superior), e a biblioteca cx_Oracle para fazer a conexão entre o Python e o Oracle.

Se você já conhece a ferramenta, ou conhece outras alternativas, dê seu testemunho a respeito. Será bastante benvindo.

sexta-feira, 20 de janeiro de 2006

Software e filmes

O artigo Successful software management style: Steering and balance*, que faz parte da edição de janeiro do ezine developerWorks : Rational: Rational Edge ezine provoca o leitor ao tentar comparar o processo de desenvolvimento de software à produção de um filme. É claro que as semelhanças não são lá muito grandes, mas o autor tenta propagar a idéia de que o processo de desenvolvimento está muito mais perto do processo de produção cinematogáfica, do que o de produzir uma ponte. E certamente ao fim do artigo você acaba concordando com ele (bom, eu ao menos concordei).

De qualquer forma, o mais importante neste texto são as quatro práticas que ele descreve como características de projetos de software bem sucedidos. Resumidamente, estas práticas são:
  1. Gerenciamento de escopo: soluções evoluem a partir de especificações, e especificações evoluem a partir de soluções candidatas. Ou seja, não adianta obter todos os requerimentos de um projeto antes de começar a implementar. Isto ocorre porque normalmente o cliente não sabe ao certo o que ele quer, e quando você solta a primeira versão de uma solução, daí então ele começa a realmente entender o que ele quer, e o que você pode fazer pra ele. Com isto, o autor defende a idéia de soltar versões funcionais, mas não completas, em intervalos de tempo curtos. Com isto, o entendimento do problema, e da solução aumenta com o passar do tempo, e fica mais fácil se detectar problemas nas primeiras iterações de um projeto.
  2. Controle do processo: O rigor no processo de desenvolvimento de software deve evoluir de um controle menos rígido para uma mais rígido. Com isto você não engessa a evolução das primeiras fases, contribuindo para aumentar a velocidade na implementação de pequenas versões funcionais que serão úteis para a detecção de falhas no início do processo.
  3. Progresso: Projetos saudáveis exibem uma seqüência de progressões e digressões. Ou seja, a gente também erra. Não é sempre que a gente vai acertar, e isso é bom. Os erros são importantes para entendermos mais rápido o problema. Por isso a importância de ciclos de vida curtos. Quanto antes você detectar um erro, mais rápido você consegue voltar atrás, e corrigir o problema.
  4. Controle de qualidade: Testes de releases de demonstração é uma atividade vital, que completa uma iteração do projeto. Todas as soluções candidatas devem ser testadas, e os testes devem evoluir conforme o projeto. Nas primeiras iterações os testes devem ser menos estritos, focando em problemas de arquitetura, integração ... conforme o projeto evolui, teste de funcionalidade, teste de casos de uso e simulações vão se tornando mais necessários e completos, pois evoluem conforme o entendimento do problema.
Diversas outras idéias são colocadas pelo autor - Walker Royce, vice-presidente da IBM Rational Worldwide Brand Services - e são interessantes. Recomendo a leitura deste artigo a todos que têm interesse na área de engenharia de software e gerenciamento de projetos. Depois, coloquem seus comentários aqui, pra discutirmos mais as idéias do autor, e nossas próprias experiências.

quinta-feira, 19 de janeiro de 2006

Tablane: mais um browser na área

Eis que surge mais um browser: Tablane

Este é um browser construído sobre a engine do IE, e atualmente só possui versão para Windows. Uma das inovações deste browser é o conceito de Lane. Através dele você pode visualizar dois sites ao mesmo tempo, o que facilita a vida pra quem precisa fazer comparações pela net, por exemplo, comparar os preços do Submarino e das Americanas. Ele também permite o uso de várias tabs, e em cada tab, vários lanes (por isto Tablane).

Outra inovação é o conceito de Collections, que é um grupo de bookmarks salvos no formato XML RSS, facilitando o gerenciamento e compartilhamento dos seus sites favoritos.

Com certeza, não é um site para brigar com o IE, Firefox ou Opera, mas tem algumas inovações interessantes, que certamente serão absorvidos pelos outros navegadores em breve. Vamos esperar.

terça-feira, 17 de janeiro de 2006

A verdade sobre reuniões

Todos aqueles que trabalham em grupos já passaram pelas tediosas experiências de reuniões de equipe, de projeto, disso e daquilo ... e assim como eu, quando chega a hora de ir pra uma reunião ficam com aquele pensamento: "Que saco, outra reunião!". Bom, talvez se você passar o artigo do link abaixo para seu chefe, ele compreenda que reuniões não são tão boas quanto ele imagina.

EducationGuardian.co.uk | Research | Bored meetings

Este artigo fala sobre o trabalho de dois pesquisadores que dizem que reuniões demais são antiprodutivas, e podem ter um efeito negativo sobre os colaboradores. Vale a pena ler!

terça-feira, 10 de janeiro de 2006

Plugin Eclipse para Perl

Para quem como eu trabalha com desenvolvimento de aplicações Java em eclipse, e precisa trabalhar também com Perl, talvez fique um pouco desconfortável em trabalhar com editor de textos como o Emacs. Uma alternativa interessante é o seguinte plugin para eclipse

EPIC - Eclipse Perl Integration
Este plugin cria um ambiente para desenvolvimento de programas em Perl, oferecendo muitas das funcionalidades disponívies para desenvolvimento de código Java, como:
  • Destaque de sintaxe (Syntax Highlighting)
  • Checagem de sintaxe durante digitação
  • Ajuda de conteúdo
  • Outline com módulos e subrotinas
  • Debugger
  • Plugin para expressões regulares (permite testar expressões regulares)
O plugin é bastante interessante, mas peca pela performance. Mas acredito vá evoluir bastante ainda. Recomendo pelo menos que se teste esta ferramenta, que pode facilitar um pouco a vida no desenvolvimento de código Perl.

sexta-feira, 6 de janeiro de 2006

Escopo em JSF

Quando conheci JavaServerFaces, achei muito bacana. Componentes pra apresentação de páginas HTML, MVC, listeners ... gostei da idéia e comecei a desenvolver aplicações com esta tecnologia. Fui feliz durante algum tempo, até começar a me deparar com o que considero uma pequena deficiência do JSF: Escopo de requisições.

Em JSF temos três tipos de escopo aparentemente bastante simples
- request: cada requisição um novo estado;
- session: o estado é mantido enquanto durar a sessão;
- application: o estado é mantido até que a aplicação morra;

Mas estes três escopos não cobrem tudo. Veja por exemplo um problema que enfrentei graças a isto:

Desenvolvi uma página JSF, associada a um JavaBean, que exibe os valores deste bean e tem alguns botões que oferecem algumas funcionalidades ao usuário. O escopo desta página foi definido como request. Na primeira vez que acesso esta página, carrego os valores do bean através do seu construtor (passo pela requisição o parâmetro desejado, e com ele a aplicação carrega os valores dos atributos através de chamadas a métodos da persistência. Alguns dos botões da minha página são exibidos somente em alguns casos, dependendo dos valores dos atributos do bean. Quando clico em um destes botões, associados a um actionListener, o bean é reinicializado. No entanto, o parâmetro de inicialização não é passado, e por isso o construtor não consegue atualizar os valores. Tudo bem, isto será feito pelo JSF na fase "Update Model Values". O único problema é que antes desta fase, o JSF verifica se as componentes devem ser renderizadas ou não, e vai utilizar os valores não inicializados. Com isto, a componente do meu botão clicado anteriormente não será renderizada, e portanto não posso invocar o actionListener associado a ele. Para resolver isto, utilizei a solução descrita neste tópico do Java Forums, ou seja, uma grande gambiarra. Não gosto desse tipo de solução, preferiria que a tecnologia me desse suporte para fazer as coisas de maneira mais limpa.

O artigo abaixo fala bem deste problema de escopo, e apresenta uma solução interessante. Pessoalmente acho uma gambiarra também, mas bem mais elegante que a minha

Gradebook - Taming JSF 1.1 - Confluence

Fico feliz de não ser só eu que acho que existe esta limitação em JSF. Não quero ter que colocar como session algo que não precisa durar pela sessão toda. Espero que os desenvolvedores do JSF pensem nisso nas próximas versões. Mas como esta tecnologia esta ainda na sua versão 1.1 (a 1.2 virá logo, aguardem), não vou desistir dela, pois parece bastante promissora.




quinta-feira, 5 de janeiro de 2006

Exemplo do potencial de AJAX

Há um tempo atrás fui apresentado ao AJAX por um amigo fã de novas tecnologias. No início não dei muita bola, mas depois achei interessante, e até implementei uma componente JSF que usa AJAX para uma aplicação aqui no trabalho. Nada demais, mas legal pra validar e gostar da tecnologia.

Vejo um grande potencial nesta tecnologia, mas ainda não vi nada de muito espetacular feito em AJAX. No entanto, lendo o artigo

» Bricklin cleans up wikiCalc with AJAX | Between the Lines | ZDNet.com
fiquei impressionado com o que o autor disse que foi feito com AJAX. Basicamente, utilizou-se AJAX para melhorar a usabilidade de um sistema que ele está desenvolvendo (wikiCalc), que é um sistema wiki que permite a criação colaborativa de planilhas. O AJAX foi utilizado pra dar uma cara mais Excel pra ferramenta. Fiquei bastante impressionado, e estou ansioso pra fazer algo semelhante.

Projeto Raptor

A Oracle lançou uma versão early adopter do projeto Raptor, uma ferramenta gráfica que permite a navegação em bancos de dados, rodar comandos e scripts SQL, além de editar e debugar comandos PL/SQL. Permite ainda rodar qualquer número de relatórios disponíveis, assim como possibilita que você crie e salve seus próprios relatórios.

Para mim que me acostumei a utilizar o PLSQL Developer, esta ferramenta pareceu-me bastante boa, com uma usabilidade melhor que a do PLSQL Developer, mas com uma performance inferior. No entanto, o projeto Raptor é gratuito enquanto o PLSQL Developer custa em torno de US$ 100,00 a licença. Para desenvolvedores como eu parece ser uma boa saída, mas para DBAs provavelmente não.

Desnecessário dizer que o projeto Raptor foi desenvolvido para bancos de dados Oracle.

Maiores detalhes, acesso o site:

Project Raptor