quarta-feira, 2 de agosto de 2006

[JSF] - DataTables, CommandLink's e CommandButton's

Aqueles que já tiveram o prazer de tentar fazer uma componente commandLink ou commandButtons funcionar dentro de uma componente ''dataTable'' utilizando o escopo request para o managed bean que armazena os dados exibidos pelo dataTable, sabem que não dá. O jeito é mudar o escopo do managed bean para session.

O problema com esta "solução" é que os dados perduram. Exemplificando: imagine que você está implementando um caso de uso que mostra uma lista de entidades que obedecem às restrições impostas por filtros de busca cujos valores são determinados pelo usuário. O comportamento esperado é que, ao acessar a página, não se mostre nenhum valor, e após o usuário ordenar a busca, os elementos sejam obtidos e exibidos. Simples assim. Com a "solução" acima, isto ocorre na primeira vez que o usuário acessa esta página. Porém, dentro da mesma sessão, nas próximas vezes que o usuário acessar a página, ele irá automaticamente visualizar os dados da última busca que ele realizou.

Um pouco de pesquisa, na tentativa de manter o escopo como request, me levou à seguinte descrição de bug (que no final mostrou não ser um bug) - javaserverfaces:issue 69.

Conforme entendi, o problema é que no momento do processamento da fase Apply request values, o managed bean com os dados utilizados pela dataTable ainda não foi inicializado (ele somente será na fase Render response). Desta forma, a decodificação desta componente não funcionará como esperado, e tampouco a decodificação das componentes filhas (incluindo os commandLink's e commandButton's). Por isso, nenhum método de ação associado a estes elementos será executado.

Chegamos então à seguinte conclusão: nossa aplicação só funciona se usarmos escopo session. Mas isto é necessário somente para os dados a serem exibidos pelo dataTable. Com isto, sugiro a seguinte solução:

  1. Crie um managed bean (requestBean) em escopo request para gerenciar os dados não associados ao dataTable, e para gerenciar as ações da sua página
  2. Crie um managed bean (sessionBean) em escopo session somente para armazenar os dados exibidos pelo dataTable
  3. Você deve atribuir um valor vazio para os dados do sessionBean no construtor do requestBean, e com o resultado da busca, sempre que o método que realiza a busca em requestBean for executado

Surge aí outro problema. Como alterar os dados de sessionBean a partir do requestBean? Basta usar o seguinte código dentro do requestBean:


FacesContext context = FacesContext.getCurrentInstance();
context.getApplication().
createValueBinding("#{SessionBean.data}").setValue( context, newData );


Você pode reparar que o EL #{SessionBean.data} é igual ao EL que você usa no seu JSP associado ao atributo value da sua componente dataTable (h:dataTable).

É uma solução trabalhosa. Muito melhor seria se o JSF funcionasse de forma um pouco mais intuitiva. Mas nada é perfeito ...

segunda-feira, 17 de julho de 2006

JBoss WrappedConnection

No JBoss, quando obtemos uma conexão de banco de dados de um Datasource, obtemos um objeto da classe org.jboss.resource.adapter.jdbc.WrappedConnection, que é uma classe que implementa a interface java.sql.Connection.

No entanto, ao utilizar algumas operações específicas da implementação do JDBC da Oracle, me deparei com a seguinte exceção:

java.lang.ClassCastException: org.jboss.resource.adapter.jdbc.WrappedConnection

Pelo que pude entender isto ocorre porque estas operações específicas esperam um objeto conexão do tipo oracle.jdbc.driver.OracleConnection. No entanto, a conexão devolvida pelo Datasource é deste tipo, uma vez que estou usando um banco de dados Oracle (pois é leitor, não iria tentar usar o JDBC da Oracle com outro banco). O que o JBoss faz é encapsular este objeto dentro do objeto WrappedConnection. Desta forma, é possível obter o objeto OracleConnection e utilizar as funcionalidades desejadas do JDBC da Oracle. Para tanto, escrevi o seguinte código:

public class ConnectionUtilities {
   
    /**
     *
     */
    private static final String WRAPPED_CONNECTION_NAME =
        "org.jboss.resource.adapter.jdbc.WrappedConnection";

    /**
     *
     */
    private static final String GET_UNDERLYING_CONNECTION_METHOD =
        "getUnderlyingConnection";

    /**
     * Se a aplicação estiver rodando dentro do JBoss retorna a conexão encapsulada dentro
     * da conexão obtida pelo JBoss. Caso contrário, retorna a própria conexão dada
     *
     * @param conn A conexão com o banco de dados
     * 
     * @return
     */
    public static Connection getUnderlyingConnection(Connection conn) {
        // Variaveis auxiliares
        Connection underlyingConn = conn;
        ClassLoader cl = null;
        Class wrappedConnectionClass = null;
        Method getUnderlyingConnectionMethod = null;
       
        try {
 
            cl = Thread.currentThread().getContextClassLoader();
            wrappedConnectionClass =  cl.loadClass( WRAPPED_CONNECTION_NAME );
            getUnderlyingConnectionMethod = wrappedConnectionClass.getMethod(
                    GET_UNDERLYING_CONNECTION_METHOD, (Class[]) null );
           
            if( wrappedConnectionClass.isAssignableFrom( conn.getClass() ) ) {
                underlyingConn =
                    (Connection) getUnderlyingConnectionMethod.invoke( conn,
                            (Object[]) null );
            }
        } catch (Exception e) {           
        }
       
        return underlyingConn;
    }

}

Note-se que se este código for utilizado fora do ambiente JBoss ele retorna a própria conexão dada como parâmetro. Desta forma consigo utilizar o mesmo código no ambiente de testes que configurei no Eclipse, e no ambiente de produção com o JBoss.

quinta-feira, 27 de abril de 2006

Código de alta qualidade

Na minha vida como desenvolvedor já tive a oportunidade de trabalhar com vários outros desenvolvedores, utilizando diferentes linguagens, diferentes ferramentas, diferentes arquiteturas ... no entanto, uma coisa que é comum em todas estas experiências, diz respeito com integração de códigos.

Modelar um software, e dividir a implementação entre vários desenvolvedores é bastante comum. Na teoria, agiliza o desenvolvimento. Cada um implementa sua parte, realiza seus testes, acha tudo perfeito, e quando vai integrar, tudo começa a dar errado. E daí quando você tem que mexer no código que outra pessoa fez, daí é que tudo vai pro espaço.

Para minimizar estes problemas, é bom adotar algumas práticas de programação e desenvolvimento. Definir bons testes de unidade antes de iniciar a implementação, utilizar códigos de programação, etc ... Tendo em vista este problema, um bom artigo é o post "Producing and maintaining high-quality code", do blog Ozone. O autor lista 10 dicas sobre como escrever bons códigos, e em decorrência, gerar bons softwares.

Uma das dicas interessantes é a de número 3 - Talk to your cardboard friend, que eu conhecia como "Técnica do ursinho". Esta técnica aprendi através de um professor, que relatou que um outro professor que lecionava na universidade em que ele fez doutorado tinha um ursinho de pelúcia que ele levava nas aulas de laboratório. Toda vez que um aluno tinha uma dúvida, ele tinha que explicar o problema pro ursinho. Com isso, boa parte dos alunos conseguiam enxergar o problema, só explicando o mesmo pro ursinho.

Voltando ao artigo, é bastante interessante, e pode ser bastante útil. O autor inclusive sugere ferramentas que podem facilitar a vida dos desenvolvedores. E você, tem mais alguma dica para compartilhar? Dê seus comentários.

quarta-feira, 19 de abril de 2006

AjaxXLS

Meus posts estão ficando cada vez mais repetitivos. Na verdade ando sem muito tempo para colocar coisas interessantes aqui, apesar de estar estudando bastante coisa no momento. Mas só pra alimentar o desejo incontrolável de meu público fiel por um novo post, vou falar sobre a última da galera do ajaxLaunch.

A nova aplicação é o AjaxXLS. Diferente das outras ferramentas lançadas por esse grupo, esta funciona apenas como um visualizador, o que devo confessar me deixou um pouco desapontado. O que ele faz é abrir planilhas no formato xls, e promete manter as fórmulas, backgrounds e bordas dos arquivos. No entanto, no primeiro arquivo que fui abrir, com fórmulas, cores de linhas alternadas e formatação de fontes diversas, o resultado foi horrível. Ele apenas conseguiu mostar parte da primeira linha. Tentei depois com um arquivo sem fórmulas, e o resultado foi melhor.

Das três ferramentas que avaliei deste grupo, esta é com certeza a de menor qualidade. Com certeza eles devem prover melhorias, e espero façam com que a qualidade desta ferramenta se equipare à das demais.

quarta-feira, 5 de abril de 2006

AjaxSketch

No meu último post falei aqui sobre o AjaxWrite. O mesmo grupo que lançou esta ferramenta lançou o AjaxSketch, uma ferramenta para criar diagramas, fluxogramas, desenhos a mão livre. Tudo baseado em ajax, rodando em browsers Firefox 1.5 ou mais novos.

A ferramenta é bastante simples, e não tem o apelo de um processador de texto. Mas é interessante. Ele utiliza o formato SVG, permitindo que os arquivos gerados por esta ferramenta sejam visualizados diretamente por ferramentas como Microsoft Visio, Adobe Illustrator, Macromedia Freehand, entre outros.

Se você um dia quiser criar um diagrama básico, e tiver somente um browser à mão, lembre-se desta ferramenta.

sexta-feira, 24 de março de 2006

AjaxWrite

Imagine poder utilizar um software, como o Word por exemplo, através do seu browser, em qualquer lugar. Imagine agora que você não pagasse nada por isso. Parece bom, não? Pois é, eu também acho. E parece que Michael Robertson também. Ele acaba de lançar ajaxWrite, um processador de texto que abre e grava arquivos no formato word, com as funcionalidades básicas do famos editor de textos da Microsoft.

Um teste rápido mostrou que ele entende bem o formato. Abri uns arquivos com imagens, textos com formatações diversas, e ele mostrou o conteúdo de forma razoável. Com exceção de quebras de linhas e outras frescuras, a exibição foi idêntica ao que eu veria no Word. Fiquei bastante impressionado.

O mais interessante, é que pelo que ele diz no post de anúncio do ajaxWrite em seu site, a idéia é que este seja somente o começo. A cada semana eles irão lançar um novo programa sofisticado (só não diz quais programas serão).

Detalhe: AjaxWrite só funciona por enquanto em browsers Firefox1.5 ou superior. Ahn, e vale lembrar: para usar, não é necessário se registrar, não precisa instalar nada, não precisa nem dar seu endereço de mail. Quase perfeito!!

sexta-feira, 17 de março de 2006

JavaWhat

É sempre importante conhecer boas fontes de referência quando trabalhamos com tecnologia. Um grande problema é que geralmente você não consegue encontrar tudo num lugar só. Para aqueles com interesse em Java, isto pode mudar. Acaba de surgir um novo portal - JavaWhat. Este portal tem como objetivo servir como um diretório de recursos Java baseado em categorias públicas, onde os usuários cadastrados podem sugeriar novas categorias e adicionar suas própiras páginas web para uso futuro, e compartilhar com outras pessoas também.

Note-se no entanto que este não é um sistema wiki. O portal não oferece funcionalidades de criação de artigos, etc e tal. O usuário apenas insere links para outras páginas da web. Como o sistema é novo, ainda não há muita coisa, mas provavelmente será uma boa fonte de consulta no futuro. Vale a pena dar uma olhada, e contribuir com os artigos que você acha poderão ser úteis para outras pessoas.

terça-feira, 14 de março de 2006

Portal LivRe!

O portal LivRe! tem como objetivo facilitar o acesso e a identificação de periódicos eletrônicos gratuitos. Possui uma vasta gama de periódicos técnicos e científicos das mais diferentes áreas, com várias opções de busca e categorização por área de conhecimento.

Vale a pena conferir.

sexta-feira, 10 de março de 2006

Recomendações sobre JavaScript para AJAX

Greg Murray escreveu em seu blog no java.net um artigo com uma série de recomendações sobre JavaScript para aqueles que desenvolvem componentes que utilizam tecnologia AJAX. O artigo contém uma série de links para um documento que ele mesmo escreveu, que inclui exemplos de código. São ao todo 19 dicas que valem a pena dar uma olhada.

Greg Murray's Blog: JavaScript Recomendations for AJAX Component Writers

quarta-feira, 8 de março de 2006

Interface web sem cliques

O link a seguir leva a uma página que introduz um novo conceito: interface sem uso de cliques do mouse.

www.dontclick.it

A interface utiliza tecnologia flash, e basta você posicionar o mouse sobre o item que vc deseja visualizar, que automaticamente o conteúdo do item é exibido. Pessoalmente, senti falta do clique, pois hoje é algo automático para mim. Mas é interessante ver estas idéias surgirem.

Durante a navegação, se você clica em algo, o usuário é perguntado se o clique foi acidental ou intencional, para que os criadores possam verificar o quão difícil é romper este paradigma. Além disso, outras perguntas são feitas ao usuário, para testar a navegabilidade, entre outros.

Vale a pena dar uma olhada.

A importância de um bom design

Study: 50 percent of refunds due to bad design

O link acima mostra um artigo sobre um estudo feito por uma cientista holandesa que concluiu que metade dos aparelhos eletrônicos devolvidos às lojas funcionam como deveriam, mas os consumidores não conseguiram descobrir como fazê-lo funcionar. Basicamente por causa de problemas com interface.

Eu, como a maioria das pessoas, não tenho paciência para ficar lendo manuais para aprender a usar um aparelho, e por isso uma boa interface é necessária para que eu possa facilmente acessar as funcionalidades do produto. Essa é uma das razões por eu preferir um celular Nokia a um Motorola, por exemplo. E o estudo citado no artigo, somente vem a comprovar o quanto as empresas perdem dinheiro por causa de pobres planejamentos de interface.

E isso deve servir de aviso para nós desenvolvedores de software. Pensar em interface é um porre (ao menos para mim), mas pode ser a diferença entre o sucesso ou fracasso do nosso produto.

quarta-feira, 1 de março de 2006

Google Reader

Para me manter atualizado com o que acontece neste doido mundo de tecnologia acompanho diversos sites de comunidades, blogs, etc e tal, usano os feeds rss destes. Para tanto utilizo o thunderbird, onde também visualizo e armazeno meu mail profissional. Tem funcionado perfeitamente para mim, e não tenho nenhuma reclamação. No entanto, um amigo meu neste carnaval me despertou para um problema: "E se eu for embora da empresa? Vou lembrar de todos os rss que tinha?"

Este mesmo amigo disse que usava um serviço web pra ler os rss dele, mas não lembrava do nome ... resolvi googlear, e achei o Google Reader. Como já tenho minha conta google, foi fácil entrar e tudo o mais. Exportei meus rss do thunderbird, importei lá, e pronto. Agora, posso acompanhar as novidades das minhas fontes de informação em quaisquer lugares. Mas não pretendo abandonar o thunderbird ainda ... ainda acho que ler meus mails e rss num único lugar é o que há.

terça-feira, 21 de fevereiro de 2006

JUnit 4.0

Aqueles que como eu gostam das funcionalidades do JUnit, certamente vão gostar de saber que acaba de ser lançada a versão 4.0. Para quem não sabe, o JUnit é um framework para escrever e executar testes automatizados. Esta versão requer a versão 5.0 do Java, e utiliza anotações.

Para obter esta versão, basta seguir o link:
SourceForge.net: JUnit 4.0

Junto com o download, há também o JUnit 4.0 cookbook com descrições de como utilizar as funcionalidades.

quinta-feira, 9 de fevereiro de 2006

QuickTime for Java API

O link a seguir o leva a um artigo que nos introduz à API QuickTime for Java.

Mobile video: Get started with the QuickTime for Java API
Esta API permite o acesso aos formatdos de mídia mais atuais, diferente da API do Java Media Framework (JMF). Com isto é possível criar conteúdo de vídeo para seu IPod, utilizando Java. Para os aficcionados neste aparelhinho, é uma boa leitura.

Core Developers Network

Atualmente estou pesquisando a tecnologia JMS para utilizá-la em um projeto que estou desenvolvendo na empresa onde trabalho. Buscando na internet por fontes de referência sobre esta tecnologia, encontrei o seguinte site:

Core Developers Network

Este é o website de uma empresa britânica que se propõe a disponibilizar serviços de consultoria, treinamento, suporte e desenvolvimento em tecnologias open-source como JBoss, Apache Geronimo, Jakarta Tomcat, entre outras.

Dentro desta filosofia de trabalho eles disponibilizam diversos artigos sobre tecnologias open-source. Para quem tem interesse em tecnologias open-source relacionadas a J2EE é uma ótima fonte de consulta.

E vc? Conhece outras fontes de informação interessantes? Compartilhe-as conosco. Deixe seu comentário.

sexta-feira, 3 de fevereiro de 2006

Agile development e testes de software

Floyd Marinescu (fundador da comunidade TheServerSide) escreveu o seguinte post em seu blog: Agilist Scott Ambler tears apart the QA/Testing folks

Nele ele fala sobre a apresentação de Scott Ambler em uma conferência sobre Qualidade de Softwares e Sistemas, para um público formado de gerentes de testes, analistas de qualidade e testadores de software. Scott Ambler é um defensor do Agile development, uma metodologia de desenvolvimento de software que tem sido bastante divulgada, e tem tido uma boa aceitação no mercado de desenvolvimento de software. Nessa apresentação, ele apresentou essa metodologia, sobre como ela produz software de boa qualidade, como desenvolvedores e stakeholders juntos realizam testes dentro de cada iteração, acabando por diminuir a necessidade de uma equipe separada para testes.

Meu conhecimento em testes é muito pequeno, e é a parte do desenvolvimento de software que considero mais deficiente nas minha prática diária. No entanto, reconheço a importância dessa área para gerar uma solução de qualidade. Por isso este artigo me chamou a atenção, e fez surgir em mim o interesse nessa metodologia Agile. Se o que Scott disse realmente for verdade, terei que pensar seriamente em como aplicar as práticas dessa metodologia no dia a dia do meu trabalho.

Vou começar a pesquisar sobre este assunto. Aguarde novidades a respeito. E se você tiver algum conhecimento sobre Agile, testes de software que você queira compartilhar, deixe seu comentário.

quarta-feira, 1 de fevereiro de 2006

Projeto Open-Source para desenvolvimento usando AJAX

A tecnologia AJAX parece que está tomando corpo. Diversas empresas de software propuseram um projeto open-source para desenvolver um framework para desenvolvimento de aplicações que utilizam AJAX. A idéia é incluir este projeto dentro do projeto WTP (Eclipse Web Tools Platform).

Quem está liderando esta iniciativa é a IBM, que fará uma doação inicial de código que engloba as funcionalidades centrais deste framework. Além da IBM, outras empresas como BEA, Laszlo, Oracle, RedHat, entre outras, estão tomando parte nesta iniciativa.

Conforme o plano de desenvolvimento divulgado, a idéa é que no primeiro trimestre deste ano já exista um protótipo incial disponível.

Para maiores detalhes, veja:

The AJAX Toolkit Framework (ATF) Project

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