junho 2007
Monthly Archive
dom 10 jun 2007
Um dos recursos mais simples e práticos do uso de computadores pessoais é o Recortar/Copiar-e-Colar (em inglês, Cut, copy and paste). O conceito foi inventado no Centro de Pesquisas Xerox de Palo Alto (PARC) — celeiro de outras invenções fundamentais da computação moderna, como o mouse — em 1974 por Lawrence Tesler, originalmente para edição de textos.
A funcionalidade é tão essencial e unânime que, junto com o recurso de Desfazer (Undo), as teclas associadas às ações (combinadas a uma tecla de comando como Control) foram adotadas igualmente por todos os sistemas operacionais — começando por Apple no Macintosh/MacOS e Microsoft no DOS/Windows — em seqüência no teclado: Z (desfazer), X (recortar), C (copiar), V (colar).
Com o conceito definido como Área de Transferência (Clipboard), área temporária na memória do computador para onde um conteúdo pode ser recortado (movido) ou copiado, e de lá colado em outra posição ou documento, a ação de recortar/copiar-e-colar torna fácil o processo criativo e produtivo não só de texto, mas dos mais diversos tipos de conteúdo e informação manipulados em computadores.
A operação de recortar-e-colar é uma forma prática de se mover conteúdo de um local para outro.
Já o simples copiar-e-colar dá vazão a algo muito maior: a natureza expansiva da informação, onde o conteúdo criado uma vez deve ser usado, repassado, e reaproveitado, dando alto sentido e valor à informação original. Não é à toa que muitas vezes já escutei a paródia do Princípio de Lavoisier aplicado à tecnologia: “Na informática nada se perde, nada se cria, tudo se copia”.
Copiar conteúdo facilmente é muito útil. Mas o excesso de facilidade rapidamente traz também riscos. Por exemplo, quando o conteúdo em questão é um material com direito autoral, copiar-e-colar sem o devido crédito e autorização pode significar plágio ou outra violação de direitos.
Igualmente grave é o fato de que copiar-e-colar é perfeito para a cópia de conteúdo igual, mas ocorre que muitas vezes se precisa de um conteúdo similar, mas não idêntico. Aí, depois do copiar-e-colar é preciso modificar ou adaptar o que for necessário. E se não for tudo alterado adequadamente, surgem enganos, erros e inconsistências. Quem não sabe citar exemplos de algum conteúdo errado cuja causa foi um copiar-e-colar onde se esqueceu de mudar o que não se aplicava ao conteúdo destino?
Quando analisamos o copiar-e-colar na programação, aí a coisa fica mais séria. Quase sempre o copiar-e-colar de código-fonte é indício de que alguma boa prática de desenvolvimento/programação está sendo negligenciada.
Martin Fowler fala, sabiamente, o óbvio do bom senso em seu livro “Refatoração – Aperfeiçoando o projeto de código existente” (Bookman, 2004, ISBN 85-363-0395-6):
A Regra de Três
Aqui está uma diretriz que Don Roberts me deu: na primeira vez em que faz algo, você apenas faz. Na segunda vez em que faz algo parecido, você estremece diante da duplicação, mas a faz de qualquer forma. Na terceira vez em que faz algo parecido, você refatora.
De fato, se você for copiar um trecho de código, deveria antes de tudo se perguntar: Não seria o caso de encapsular este trecho de código em um método/função e promover o correto reuso? E se você for copiar e modificar um pouco, não seria o caso de fazer uma sobrecarga de método — nas linguagens de programação orientadas a objeto — ou parametrização, tratando a situação que varia?
Da inobservância a esses riscos na prática do copiar-e-colar surgem erros de conteúdo mal reaproveitado e bugs de código mal adaptado. É por isso que costumo brincar que, principalmente no desenvolvimento de software, copiar e colar é “a origem de todo mal”.
sáb 9 jun 2007
[Atualizado em 16 de agosto e 20 de dezembro de 2007, 27 de abril de 2008.]
Em meu artigo Novo impulso ao JavaScript, estive comentando como a onda de alta interatividade da Web 2.0 e o mecanismo AJAX estão impulsionando a evolução de componentes dinâmicos na web.
AJAX, acrônimo para Asynchronous Javascript And XML (JavaScript Assíncrono e XML), é a técnica de uso combinado de tecnologias existentes — JavaScript, XML e o objeto XMLHttpRequest — que visa propiciar mais dinamismo a páginas web, de forma a melhorar a experiência da interação do usuário. Assim, não chega a ser uma nova tecnologia em si, mas uma ampliação das técnicas de HTML Dinâmico (DHTML) no cliente web, agora interagindo também com o lado servidor.
O princípio de AJAX é, a partir de uma página web no navegador, submeter assincronamente pequenas requisições adicionais ao servidor web, e utilizar seu resultado em manipulações dinâmicas na página atual, sem a necessidade do usuário navegar para uma página inteiramente nova.
A organização OpenAjax Alliance, que reúne mais de 80 dos principais fornecedores e projetos de software livre relacionados a tecnologias para web, é dedicada a promover a adoção de AJAX de forma aberta e interoperável.
No campo estrito do HTML dinâmico com JavaScript, aplicável a páginas web independente da tecnologia no servidor, há excelentes frameworks — livres e gratuitos — de componentes web com suporte a AJAX:
Destaque também para as bibliotecas de apoio jQuery (dica do leitor Renato Silva; veja também docs, blog, refcard, tutorial, jQuery Brasil, exemplos) e Scriptaculous (veja Wiki com documentação e demos). Veja também Other Frameworks (mootools, Prototype, jQuery, YUI Library, MochiKit, Tibco General Interface, Scriptaculous, Dojo Toolkit, Base2, ExtJS), por Qooxdoo.
Falar de AJAX em aplicações web dinâmicas implica rapidamente em avaliar quais ferramentas no lado servidor se adequam melhor e mais facilmente ao tratamento de páginas e componentes dinâmicos. Este já foi tema de artigo meu em novembro de 2006, AJAX cresce rápido em Java.
Partindo dos componentes do Dojo Toolkit e outros, já existem plataformas e frameworks abertos e flexíveis para o suporte a AJAX em Java. As seguintes referências de destaque são software livre:
- DWR – Direct Web Remoting, Easy Ajax for Java: projeto patrocinado pela TIBCO. Largamente utilizado, podendo-se citar como cases de destaque o Walmart, o software de incidentes JIRA, o portal de tecnologia InfoQ e muitos outros. Veja Desenvolvendo aplicações Web 2.0 com Java e AJAX (FrameWork DWR), por Augusto Marinho, maio 2007, portal Viva o Linux; e Using DWR with TIBCO General Interface, por Joe Walker, dezembro 2007.
- jMaki: projeto membro da comunidade GlassFish (servidor de aplicações, software livre que é implementação de referência suportada pela Sun para a plataforma Java EE). O segundo artigo da série em SDN sobre “AJAX em Java EE” cobre o jMaki em profundidade: New Technologies for Ajax and Web Application Development: Project jMaki, por Jennifer Ball, novembro 2006 (visão geral no primeiro artigo). Veja também jMaki.com: Resources, Sister sites, Blogs; Introduction to jMaki, por Carla Mott, Sun Java EE Tech Tips, janeiro 2007; jMaki Extensions, junho 2007, por Greg Murray, arquiteto AJAX da Sun e criador do Projeto jMaki; jMaki wrappers for ExtJs, por Carla Mott, dezembro 2007; jMaki and GWT : Kissing Cousins, por Greg Murray — arquiteto Ajax da Sun e criador do Projeto jMaki, 2007-12-21.
- ThinkCAP JX, por ClearNova: plataforma de desenvolvimento Ajax e Java com ambiente RAD/visual para construção de aplicações Internet ricas, baseado em Ajax, Java EE e bibliotecas de software livre (Struts, Hibernate, JFreeChart, prototype.js e outras). Veja também ClearNova’s ThinkCAP JX, a Comprehensive AJAX Platform Released as Open Source, por Hatem, 2006-01-26, AJAX Magazine; e ClearNova open sources ThinkCAP JX, its AJAX platform, por Joseph Ottinger, 2006-01-10, TheServerSide.COM.
- ThinWire – Ajax RIA Framework: framework Java para desenvolvimento de aplicações web Ajax que se comportam como GUI desktop, usando um modelo GUI orientado a eventos. Projeto em SourceForge.
Diversos frameworks web MVC oferecem suporte a componentes Ajax. Em Java, uma das primeiras iniciativas de porte neste sentido foi o do Google Web Toolkit (GWT), poderoso, prático e livre, que já nasceu com foco em Ajax. Frameworks como Wicket — veja Interview: How Wicket Does Ajax, Javalobby, 2008-04-25 –, Struts 2 (WebWork) e NextApp Echo2, entre outros, incorporaram suporte a Ajax ao longo de suas evoluções. Para Tapestry, existe a biblioteca Tacos de componentes Ajax.
Contudo, creio que o uso dos componentes dinâmicos AJAX está atingindo o seu auge quando aplicado ao padrão JavaServer Faces (JSF), que tem como fundamento exatamente a programação web em Java orientada a componentes e eventos. Estão surgindo componentes JSF cada vez mais ricos e com melhor suporte a AJAX. Cito as principais bibliotecas/frameworks JSF livres que conheço, com suporte a AJAX:
- ICEfaces (veja components showcase): tornado software livre este ano pela empresa criadora ICEsoft, o framework ICEfaces é muito rico. A página de download oferece também pacotes de integração para os principais IDEs como Eclipse, Netbeans, JDeveloper e outros.
- MyFaces Trinidad, originado do Oracle ADF Faces: tornados open source, em doação ao Projeto Apache MyFaces, os vastos componentes ricos ADF Faces da Oracle para JSF, baseados no framework ADF, originaram o projeto Apache Trinidad. Veja Developing Smart Web UIs with Ajax, JSF, and ADF Faces, por Andrei Cioroianu, fevereiro 2006; Ajax Transactions Using ADF and JavaServer Faces, por Duncan Mills, junho 2006; How-to configure Apache Trinidad components in Oracle JDeveloper, por Frank Nimphius, Oracle Corporation, abril 2007.
- JBoss Ajax4jsf e JBoss RichFaces: recentemente tornados open source em pareceria estratégica entre sua criadora Exadel e a JBoss/Red Hat. Veja RichFaces live demo.
- Dynamic Faces: parte do projeto JSF Extensions, componente da comunidade GlassFish. Tem com principal desenvolvedor o engenheiro sênior da Sun Ed Burns, a partir da idéia inicial de JSF Avatar de Jacob Hookom. Provê extensões à implementação de referência JSF 1.2 para suportar AJAX. Veja Introducing Project Dynamic Faces, por Ed Burns, agosto 2006; o terceiro artigo da série citada na SDN New Technologies for Ajax and Web Application Development: Project Dynamic Faces, por Jennifer Ball e Ed Burns, dezembro 2006; Setting Up Your Application to Use Project Dynamic Faces, no Sun Web Developer Pack Tutorial; e Adding Ajax to JavaServer Faces Technology With Dynamic Faces, por Ed Burns, março 2007, SDN.
- Projeto Woodstock: componentes JSF com suporte a AJAX, integram o NetBeans Visual Web Pack. Veja Project Woodstock: Next Generation of Smarter UI Components, 2007-06-27; All About Component Libraries do NetBeans, por Edwin Goei; e Delving Into Components, maio 2007.
Uma tabela comparativa de várias bibliotecas pode ser encontrada em AJAX JSF Comparison Matrix.
Veja também as indicações em Uma centena de sugestões para programação Ajax e Javascript, por Cid Andrade, 2008-04-16.
Para saber mais (em inglês):
- AJAX (programação) em Português; e Ajax (programming) em Inglês, por Wikipédia.
- Ajax: A New Approach to Web Applications, por Jesse James Garrett, 2005-02-18, Adaptive Path.
- 30 Of The Best AJAX Tutorials, 2007-12-20, em Designs Advice.
- The ABCs of RIA — An InfoWorld survey of the applications and technologies we call ‘rich’ –, por Martin Heller, 06/08/07, InfoWorld.
- Rich Internet applications – RIA TechIndex, índice de artigos técnicos da InforWorld para os temas de RIA, Ajax e Web 2.0.
- Ajax in Practice, Ajax Developer Resource Center, Sun Developer Network (SDN).
- Ajax Patterns, portal sobre Ajax, padrões recomendados e o livro originado destes. Veja também as listagens Javascript Multipurpose Frameworks, Ajax Frameworks e Java Ajax Frameworks.
- Asynchronous JavaScript Technology and XML (Ajax) With the Java Platform, por Greg Murray, junho 2005, atualizado em outubro 2006, SDN.
- AJAX FAQ for the Java Developer, por Greg Murray, Java Enterprise Blueprints.
- AJAX Magazine, membro da PHP Magazine Network.
- AJAXWorld Magazine, publicação da SYS-CON Media.
- Ajax Matters, tutoriais e artigos sobre AJAX em profundidade. Nascido em 2004 como um blog sobre AJAX, desde julho 2007 teve o foco redirecionado para criação de uma base de conhecimento mais detalhada para desenvolvedores AJAX.
- Ajax Blog, técnicas de codificação HTML, Javascript e XML para Web 2.0.
- Ajax em MDC, Mozilla Developer Center.
- Ajaxian: blog de notícias, podcasts, showcases, recursos. Planet Ajaxian: blog de conteúdo.
- AJAX is the future of Web app development — But security, reliability and performance are Achilles’ heels. –, por Thomas Powell, 2006-07-17, Network World.
- Top AJAX tools deliver rich GUI goodness — Backbase, Bindows, JackBe, and Tibco General Interface bring fat features to enterprise Web clients –, por Peter Wayner, 2006-11-27, InfoWorld.
- Surveying open-source AJAX toolkits — Packages from Dojo, Zimbra, Yahoo, Microsoft, Google, and OpenRico/Prototype showcase the variety of libraries available to AJAX developers –, por Peter Wayner, 2006-07-31, InfoWorld.
- AJAX breathes new life into Web apps — Forget what you knew about JavaScript, DHTML, and the browser; it’s a whole new ball game –, por Peter Wayner, 2005-05-23, InfoWorld.
- The AjaxComponent strategy for JSF: The best of both worlds — Ajax-enable your components with a phase listener, por Matthew Tyson, 2007-12-20, JavaWorld.com.
- Ajax in Apache MyFaces (PDF) — A new Approach to Web Applications, apresentação em ApacheCon Asia 2006. Veja também o projeto MyFaces Tomahawk, de extensões à especificação JSF.
- Building Custom JSF UI Components, por Chris Schalk, gerente de produto e evangelista do Oracle JDeveloper, agosto 2005, TheServerSide.COM.
- Introduction to Javaserver Faces – What is JSF?, por Chris Schalk, abril 2005, OTN.
- Ajax for Java developers: Build dynamic Java applications, por Philip McCarthy, setembro 2005, IBM developerWorks; e Java object serialization for Ajax, outubro 2005.
- Open Source AJAX Frameworks with Server-Side Java Support, listagem atualizada em 2007-02-25, Manageability.
- Ajax Forms with jQuery, por Trevor Davis, 2007-09-08.

sex 8 jun 2007
Turbine, framework para desenvolvimento de aplicações web surgido dentro do Projeto Apache Jakarta, tornou-se ontem projeto de primeiro nível (Top Level Project – TLP) da Fundação Apache, atingindo assim o estágio de projeto autônomo por seu grau de relevância e maturação. Com isso, o endereço do Projeto Apache Turbine passa a ser turbine.apache.org.
Atualmente no release estável 3.2.2, Turbine é um framework baseado em servlet para desenvolvedores Java experientes construirem rapidamente aplicações web. Inclui funcionalidades como sistema de gerenciamento de segurança de acesso, um serviço de agendamento, servidor de validação definido por XML, e serviço XML-RPC para web services. É uma boa escolha para aplicações que usam arquitetura orientada a serviços (SOA). O Turbine suporta tanto JavaServer Pages (JSP) e JSTL quanto o mecanismo de templates Velocity como tecnologia de apresentação web.
Dia 6 foi lançada a versão 1.3 do sistema de cache distribuído em Java Jakarta JCS – Java Cache System. É o primeiro release oficial do JCS dentro do Projeto Jakarta. Fonte e binários estão disponíveis na página de download do JCS.
Em 18 de maio havia sido disponibilizada o Jakarta POI 3.0, TLP Apache que também já foi projeto dentro do Jakarta. POI é uma API Java para acesso e manipulação de arquivos em formatos Microsoft: Microsoft OLE 2 Compound Document, Word, Excel e, neste novo release, suporte inicial a PowerPoint. POI 3.0 traz também muitas correções de bugs e novos recursoscomo avaliação de fórmulas Excel. Detalhes da atualização estão no Change Log. Obtenha o POI em um dos mirrors de download.
Retornando a abril, dois componentes do utilíssimo projeto Jakarta Commons haviam sido atualizados:
Commons Configuration 1.4 (8 de abril) — componente para fácil manipulação de configurações/preferências de aplicações suportando diversos formatos de arquivo. A versão 1.4 corrige vários bugs e adiciona novidades como suporte a arquivos Windows INI e nova estratégia de recarga acionável por JMX, entre outros. Para mais detalhes, veja Change Log e Release Notes da versão. Download do Commons Configuration.
Jakarta Commons DBCP 1.2.2 (3 de abril) — excelente e super estável serviço de pool de conexão a bancos de dados, baseado no Commons Pool. É utilizado na implementação de datasources JNDI do Apache Tomcat e por muitos outros produtos. A versão 1.2.2 corrige muitos bugs, passa a utilizar o Pool 1.3 e elimina a dependência do Commons Collections (classes LRUMap e SequencedHashMap do Collections 2.1 usadas foram embutidas no DBCP). Veja mais no Release Notes. Download do Commons DBCP.
qui 7 jun 2007
Lendo ontem a postagem Eclipse – Cada vez mais User Friendly no weblog de Rodrigo Urubatan, vi que, além das iniciativas que citei para o Eclipse em meu artigo Melhores IDEs Java gratuitos, estão chegando outras importantes novidades para melhorar a facilidade de instalação e uso do IDE Eclipse: Projeto de Empacotamento do Eclipse (EPP) e Esforço de Lançamento Simultâneo Europa 2007.
O novo projeto Eclipse Packaging Project (EPP) foi criado em fevereiro de 2007, por iniciativa principal da empresa Innoopract — criadora da distribuição independente Yoxos — e com contribuições da Instantiations e da Xored Software. A primeira proposição do projeto é uma nova página de downloads para o Eclipse (protótipo em avaliação) já oferecendo pacotes prontos para diversos perfis iniciais de uso. Visa também desenvolver um instalador para o Eclipse e ferramentas para criação de pacotes a partir de um site de atualização, algo provavelmente inspirado no inovativo Yoxos On Demand.
O Europa Simultaneous Release é o novo esforço de lançamento simultâneo dos principais projetos da Fundação Eclipse para 2007, centrados na versão 3.3 da Plataforma Eclipse, assim como o Callisto foi o esforço de lançamento simultâneo de 10 projetos com o Eclipse 3.2 em 2006. Desta vez, o audacioso esforço Europa planeja englobar 20 sub-projetos, incluindo o Eclipse 3.3 base (Equinox, Platform, JDT, PDE), WTP 2.0, Mylar 2.0, TPTP 4.4, BIRT 2.2, AJDT 1.5 e vários outros.
A nova versão do Eclipse 3.3 — também comentada no blog do Urubatan — está em estágio avançado de desenvolvimento. Em 1º de junho saiu o Release Candidate 3 (RC3). O Web Tools Plataform (WTP) 2.0, cujo RC2 foi lançado ontem, 6 de junho, trará finalmente um editor visual para HTML e JSP.
« Página anterior