FAQ


Depois que atualizei para o novo Ubuntu 8.04 LTS Hardy Heron (utilizando a opção automática pelo Gerenciador de Atualizações), quase tudo funcionou perfeitamente.

Observei até agora apenas um problema de configuração: os botões laterais “Avançar” e “Voltar” — que uso freqüentemente para navegação no histórico de páginas web (Firefox) — do meu mouse Logitech MX700 pararam de funcionar. Eles funcionavam até o Ubuntu 7.10 com as configurações que apresentei em meu artigo Mouse multi-botões no Linux.

Pesquisando na Internet, achei o artigo Logitech MX1000 Mouse on Ubuntu 8.04 Linux (Hardy Heron), 2008-04-27, cujas sugestões de configuração funcionaram para mim.

Eis o que fiz.

Primeiro, assegure-se de ter instalado o pacote xserver-xorg-input-evdev referente ao driver evdev. Se necessário, instale o pacote. Você pode fazer isso graficamente pelo Gerenciador de Pacotes Synaptic (menu Sistema > Administração) ou por linha de comando:

sudo apt-get install xserver-xorg-input-evdev

Depois, localize o nome exato do dispositivo do seu mouse.

cat /proc/bus/input/devices

No meu caso, para o Logitech MX700 encontrei N: Name=”PS2++ Logitech MX Mouse”.

Depois, edite o arquivo de configuração do X11. Antes disso, faça uma cópia de segurança.

sudo bash
cd /etc/X11/
cp -p xorg.conf xorg.conf.backup
gedit xorg.conf

Comente a configuração de InputDevice anteriormente existente para o mouse e adicione uma nova similar a esta, usando o driver evdev (minha configuração anterior usava o driver mouse):

Section "InputDevice"
	Identifier	"Logitech MX700"
	Driver		"evdev”
	Option		“Name”		“PS2++ Logitech MX Mouse”
	Option		“HWHEELRelativeAxisButtons”	“7 6″
EndSection

O Identifier pode ser livremente escolhido por você. Se o seu mouse é outro modelo, substitua pelo nome mais apropriado. Já a opção “Name” deve receber exatamente o mesmo nome encontrado no arquivo de devices.

Ainda no arquivo xorg.conf, localize a seção ServerLayout, verifique e atualize a linha InputDevice relativa ao mouse. O nome do InputDevice deve ser o exato Identifier do mouse que você definiu.

Section "ServerLayout"
	...
	Inputdevice	"Logitech MX700"
	...
EndSection

Salve o arquivo xorg.conf.

Pronto. Reinicie o X11, saindo (logout) e entrando novamente, para ativar as novas configurações.

Para testar o funcionamento de todos os botões e controles do mouse no driver evdev, você pode usar a aplicação gráfica xev. Execute a partir de uma janela de comando, pois as informações de eventos gerados na janela gráfica de teste aparecem em texto no console.

Um aviso final: Vi em alguns fóruns que a opção Option "CorePointer" não deve ser usada na seção InputDevice com o evdev. No meu caso, realmente testei adicionar esta opção e o meu mouse ficava completamente inoperante com ela.

Eis uma ampla expansão do artigo Relatórios, gráficos e boletos em Java (2007-11-18), incluindo atualizações de Notas tech da semana (2007-12-01), anúncios de JFreeChart 1.0.9 (2008-01-07) e OpenReports 3.0 (2008-01-06) e várias outras referências.

As ferramentas livres para criação de relatórios estão, aos poucos, ampliando sua abrangência e recursos para a área de inteligência de negócios (business intelligence - BI), integrando recursos como relatórios dinâmicos, ferramentas OLAP (processamento analítico on-line) e ETL (extração, transformação e carga de dados), a partir de armazéns de dados (data warehouse - DW) e outras fontes de informação.

Relatórios & BI

  • OpenReports, solução open source para geração de relatórios, visa ser poderosa, flexível e fácil de usar. Provê geração dinâmica parametrizada baseada em navegador, com recursos de agendamento. Suporta vários mecanismos de relatório open source — JasperReports, JFreeReport, JXLS, Eclipse BIRT –, consultas baseadas em SQL direto com QueryReports e ChartReports, e suporte a OLAP via Mondrian e JPivot.
  • JasperForge, por JasperSoft, projetos de software livre para inteligência de negócios: suíte JasperIntelligence; biblioteca de geração de relatórios JasperReports + editor de relatórios iReport, com saída em formato PDF e outros; JasperServer / JasperAnalysis; e JasperETL.
  • Eclipse BIRT (Business Intelligence and Reporting Tools), sistema de produção de relatórios para aplicações web em Java, incluindo um editor de relatório baseado no Eclipse e um componente runtime para o servidor.
  • Pentaho Open Source BI Suite, plataforma e coleção de projetos open source para inteligência de negócios. Inclui Relatórios (incorporou o antigo JFreeReports), Análise (Mondrian OLAP Server), Dashboards, Integração de Dados (Kettle ETL), Mineração de Dados (Weka).
  • JPivot, biblioteca de custom tags JSP que renderiza uma tabela OLAP e provê para o usuário navegações OLAP típicas como slice-dice, drill-down e roll-up. JPivot usa Mondrian como servidor e também suporta fontes da dados XMLA.
  • DataVision, ferramenta open source de relatórios no estilo de Crystal Reports, com saída em HTML, XML, PDF, Excel, LaTeX2e, DocBook, arquivo texto delimitado por tab ou vírgula.

Para saber mais:

Gráficos

  • JFreeChart, biblioteca para geração gráficos (barras, pizza, linha etc.), pode ser utilizada com JasperReports, OpenReports e outros.
  • Apache Batik, toolkit para Scalable Vector Graphics (SVG) em Java, inclui SVG Parser, Generator e DOM. Parte do Apache XML Graphics Project.

Boletos

Para saber mais:

  • Artigo “Made in Brazil: Criando seus próprios boletos bancários com o JBoleto”, por Fabio Souza, revista Mundo Java nº 26 (ano V), novembro 2007.

Geração de documentos PDF

  • iText, por Bruno Lowagie, biblioteca para geração de PDF, utilizada por JasperReports, mas pode ser utilizada diretamente para manipulação avançada de PDF.
  • Apache FOP (Formatting Objects Processor), formatador de conteúdo XML para PDF via XSL-FO.

Para saber mais:

No portal IBM developerWorks, está sendo publicado um tutorial em três partes sobre desenvolvimento para web com o Eclipse Europa, usando Java, PHP e Ruby; por Michael Galpin, Desenvolvedor do eBay.

A terceira parte, sobre Ruby, deve sair breve saiu dia 18. Para acessar o conteúdo do tutorial, é necessário registrar-se gratuitamente no portal IBM developerWorks.


Outro artigo muito interessante, para quem está considerando suas opções de infra-estrutura para aplicações Java EE na web. JBoss, Geronimo, or Tomcat? — Três servidores de aplicação Java open source comparados, por Jonathan Campbell, JavaWorld.com, 2007-12-11. Só faltou cobrir também GlassFish.


O recente artigo An easy way to make your code more testable, no blog Programblings, me levou a outro artigo excelente.

We don’t write tests. There just isn’t time for luxuries, por James Golick, um desenvolvedor de softwre em Montreal, 2007-08-28. Golick, com argumentos objetivos passo a passo, contesta a afirmação que muito se houve de desenvolvedores ou times de software: “Não escrevemos testes ou fazemos cobertura de testes porque não temos tempo.” ou “Escrever testes toma tempo demais.”

Todo desenvolvedor precisa testar seu código, de alguma forma. A diferença é que alguns escrevem testes automatizados, enquanto outros usam humanos (normalmente, o próprio desenvolvedor) para verificar o comportamento correto. Então, o argumento “testar-nos-atrasa” reside na premissa que verificação manual é mais rápida que escrever testes automatizados.

Assim começa o raciocínio que se desenvolve ao longo do inteligente artigo. Leia e veja se você também concorda que a prática de testes automatizados pode ser bem produtiva.

Se práticas de desenvolvimento de software interessam a você, então sugiro ler também os artigos Pair Programming vs. Code Reviews, por Jeff Atwood, 2007-11-18; e Pair Programming vs. Code Reviews - It’s a no Brainer, por Mark Levison (Ottawa, Canadá), 2007-12-14. Eles confrontam programação em pares e revisão de código.


Conforme anúncio no Javalobby, acabou de ser lançada em dezembro a nova certificação Sun Certified Programmer for the Java Platform, Standard Edition 6 (CX-310-065) da Sun.

SCJP é a certificação de programação na linguagem Java, a mais fundamental no caminho de Certificações Sun para a Tecnologia Java. É também uma certificação bem reconhecida no mercado de trabalho. A nova versão do SCJP atualiza o programa da para cobrir Java SE 6.0.

Para saber mais:


Entrando na programação de páginas web, vale a pena ler The Problem With innerHTML, por Julien Lecomte, 2007-12-12.

E do HTML para o CSS. A escala graduada de 1 a 6 para Rate Your CSS Skill Level: Final Version & Poll montada pelo portal CSS-Tricks oferece critérios para você avaliar em que nível está sua habilidade com CSS. Minha auto-avaliação foi de 4. Para atingir 6, você tem que estar em estado graça ou ser membro da especificação no W3C. :-D


Da programação para os utilitários nerd. Hoje descobri algo interessante para quem às vezes lida com a linha de comando no Windows. Windows PowerShell. Esta janela de console melhorada virá no Windows Server 2008, mas qualquer usuário de Windows original (com a devida validação WGA) pode baixar gratuitamente da Microsoft.

Download Windows PowerShell 1.0 - PowerShell 1.0 para Windows XP Português do Brasil (KB926140).

Documentação: Windows PowerShell Documentation Pack (para baixar, em inglês e outros idiomas).

Já para quem conhece e sente falta dos comandos do Linux ao usar a linha de comando do Windows, recomendo meu velho conhecido GnuWin32, projeto em SourceForge que porta pacotes de utilitários GNU/Posix para Windows nativo (usando MinGW). O projeto disponibiliza centenas de pacotes binários, em arquivos ZIP para baixar.

Recomendo obter a ferramenta GetGnuWin32, que traz um script que baixa/atualiza todos os pacotes mais recentes do GnuWin32, e outro que descompacta todos os pacotes em uma pasta gnuwin32. Depois é só copiar/mover essa pasta para onde achar mais adequado (por exemplo, C:\ ou C:\Arquivos de programas\) e adicionar gnuwin32\bin ao PATH. Feito isso, grep, find, sed, tar, diff e mais quase mil outros comandos estarão disponíveis na linha de comando do Windows (inclusive na PowerShell).


Por falar em Linux, uma última nota. O IDG Now! noticiou que as Urnas usarão Linux em eleições de 2008.

O TSE autorizou a substituição dos sistemas operacionais VirtuOS e Windows CE para o sistema aberto Linux, adaptado pelo próprio órgão, em todas as 430 mil urnas eletrônicas usadas nas eleições de 2008, que escolherão prefeitos. Segundo o Tribunal, o objetivo é conferir mais transparência e confiabilidade à urna e ao processo eleitoral.

O leitor de e-mail Mozilla Thunderbird 2 e o webmail GMail (Google Mail) têm em comum um recurso que agrega segurança, eficiência e praticidade. O bloqueio e a exibição seletiva de imagens externas dentro de mensagens de e-mail.

Imagens externas ou remotas são referências a imagens na web dentro de uma mensagem formatada, para compor o conteúdo. Em termos simples, é quando o remetente escreveu a mensagem formatada e usou para diagramação ou ilustração uma ou mais imagens mantidas na internet. Em termos técnicos: existe uma ou mais tags IMG no HTML da mensagem, cujo atributo fonte (SRC) aponta para uma imagem na internet.

Neste caso, o programa de e-mail, depois de baixar a mensagem, terá de acessar a internet novamente e baixar cada imagem remota referenciada, para que seja exibida a apresentação visual completa da mensagem recebida.

Tal uso de imagens pode ser usado de forma legítima e “inocente”, para compor uma mensagem formatada e ilustrada. É inclusive muito comum nas malas diretas de empresas, que usam imagens para ilustrar os produtos divulgados. Assim, as imagens não são incluídas no corpo de cada mensagem enviada — o que efetivamente reduz o tamanho da mensagem e o tráfego de envio — mas sim acessadas da web quando cada destinatário visualiza.

Pode ser prático para quem envia, mas é perigoso para quem recebe.

Os riscos

Para começar, podem me chamar de antiquado, mas eu particularmente sou favorável do correio eletrônico para mensagens de texto puro, sem formatação, como foi originalmente concebido. Formatação HTML (fontes, cores, tamanhos… etc.) aumenta muito o tamanho da mensagem trafegada, em comparação a se fosse enviado apenas o texto puro de seu conteúdo. Considerando que em geral os programas de e-mail, ao enviar uma mensagem formatada, enviam junto também uma versão alternativa em texto puro e que as informações de formatação ocupam “espaço”, o tamanho de uma mensagem formatada é mais de duas vezes maior que o tamanho do texto puro.

Mas mesmo que você considere essencial trazer para o correio eletrônico a riqueza visual que existe na web, com seus negritos, centralizados etc., existem riscos concretos nas mensagens formatadas com imagens.

Primeiro, tráfego de rede. Imagens em geral são muito maiores do que texto e, para exibir plenamente uma mensagem com diversas imagens, seu programa de e-mail terá que baixar todas as imagens remotas usadas. Porém, você pode ter uma boa banda larga e isso gasta poucos segundos.

Em seguida vêm os ricos sérios.

Segundo, a quebra de privacidade. Quando seu programa leitor de e-mail (mesmo que seja um webmail) baixa uma imagem remota para exibir em uma mensagem, ele tem que acessar o servidor web onde a imagem está. Este acesso fica registrado. Ou seja, o servidor web “sabe” que você (seu computador) buscou a imagem naquele momento. Algumas empresas utilizam imagens (às vezes “invisíveis”, com tamanho zero ou transparentes) em malas diretas exatamente para controlar quantos, quando e quem recebeu as mensagens, com base no registro de imagens acessadas em seu servidor.

Por fim, o risco de segurança. Fraudes, spams e outras incursões maliciosas freqüentemente utilizam o mecanismo de inserção de imagens remotas na mensagem formatada para explorar alguma vulnerabilidade de segurança, de forma a exibir conteúdo impróprio, introduzir no computador destino um arquivo maléfico, abrir uma brecha para invasão ou outro dano qualquer.

A precaução e as facilidades

É por esses riscos que o Thunderbird e o GMail — e outras aplicações de e-mail que seguirem o bom exemplo — bloqueiam por padrão a exibição de imagens externas nas mensagens recebidas. É oferecida uma opção para Carregar/Exibir as imagens, que pode ser acionada pelo usuário caso ele realmente deseje.

Na ilustração seguinte, você vê parte de uma mensagem formatada recebida pelo Thunderbird. No alto, há um aviso informando que as imagens externas foram bloqueadas (ou seja, ainda não foram baixadas) e um botão com a opção “Carregar imagens”. Na mensagem, pode-se perceber os espaços reservados para as imagens, não exibidas. Se, após conferir remetente, assunto e conteúdo textual, quiser exibir as imagens nesta mensagem específica, pressione o botão.

thunderbird imagens 01 - Thunderbird - Carregar imagens 1

Porém, existem casos em que você confia bastante no remetente, sabe que ele comumente envia mensagens formatadas contendo imagens e quer que elas sejam sempre exibidas, de forma automática, sem que você tenha que solicitar a exibição de imagens a cada mensagem recebida. Para estes casos, também existe uma opção.

No Thunderbird 2, é o link “Sempre carregar imagens externas de email-remetente”.

thunderbird imagens 02 - Thunderbird - Carregar imagens 2

O Thunderbird armazena esta opção com uma das informações de um contato (remetente), no Catálogo de Endereços. Quando se escolhe o link e o remetente da mensagem em questão ainda não está no seu catálogo de endereços, abre-se uma janela de diálogo para adicioná-lo.

thunderbird imagens 03 - Thunderbird - Carregar imagens 3

Nessa janela, note a opção “Permitir imagens externas em mensagens com formatação HTML” marcada. Pronto. Com esta opção marcada em um contato adicionado a seu catálogo de endereços, o Thunderbird passa a baixar e exibir automaticamente as imagens nas mensagens formatadas recebidas deste remetente.

thunderbird imagens 04 - Thunderbird - Carregar imagens 4

Para saber mais:

Nota: uma mensagem do Submarino.com.br foi usada como exemplo nas ilustrações. A logomarca e o conteúdo ilustrativo exibidos são propriedade ou crédito do Submarino.

Entenda e soluciona erros do tipo Can"t connect to X11 window server em aplicações rodando em um servidor Java em sistema operacional Unix ou Linux.

Fundamentos

Aplicações rodando em um servidor Java EE podem precisar utilizar bibliotecas, frameworks componentes ou primitivas gráficas. Um caso típico é o processamento dinâmico de arquivos ou fluxos de dados de objetos gráficos como uma imagem, por exemplo, para a geração de um gráfico em um relatório, ou de um código de barras em um documento.

A maioria dos componentes gráficos pressupõe a existência de um ambiente gráfico (java.awt.GraphicsEnvironment), com dispositivo de exibição (tela), além de teclado e mouse. De fato, não faz sentido criar um componente gráfico desktop em Java como um Botão (Button) ou janela (Window, Frame, Dialog etc.) sem que o Java tenha um ambiente gráfico provendo as definições e configurações necessárias para a existência e exibição do componente.

Mas componentes gráficos mais genéricos como Canvas, Panel e Image podem ser criados sem existência de modo gráfico no ambiente de execução da VM Java.

Enquanto as aplicações Java desktop (Java SE) com interface gráfica (Swing, AWT etc.) requerem um ambiente gráfico para sua exibição onde a VM Java está executando, aplicações Java EE são processadas em uma VM Java no servidor, mas a exibição ocorre no lado cliente, em geral em um navegador web. Muitas vezes, um ambiente de execução servidor Java EE nem possui modo gráfico ativo.

Normalmente isso não faz diferença em sistemas Microsoft Windows, onde as primitivas do ambiente gráfico sempre estão presentes. Mas em sistemas operacionais como Unix/Linux, há diferenças no ambiente da execução da VM Java entre o modo gráfico interativo — onde há um servidor de ambiente gráfico X11 (X Window System, ver X.Org e XFree86) em execução — e o modo batch ou console não interativo (serviços ou processos daemon).

O ambiente servidor não interativo, sem dispositivos gráficos, é chamado no jargão técnico de modo “sem cabeça” ou “headless” em inglês.

Problema e solução

Para usar bibliotecas, componentes ou primitivas gráficas em ambiente servidor Unix/Linux, não interativo e sem modo gráfico, configure o Toolkit gráfico da VM Java para executar em modo “sem-cabeça”, ou Headless Mode, existente desde o J2SE 1.4.

Para isso, é necessário definir a propriedade de sistema java.awt.headless como true. Na linha de comando da execução Java, usa-se a opção -D conforme a seguir:

java -Djava.awt.headless=true

Alternativamente no código Java, no início da aplicação antes que o Tookit gráfico seja inicializado, pode-se executar:

System.setProperty("java.awt.headless", "true");

Sem esta definição em servidores Unix/Linux, a tentativa de uso de componentes ou métodos gráficos deve gerar uma erro similar a:

Exception in thread "main" java.lang.InternalError:
Can"t connect to X11 window server
using ":0.0" as the value of the DISPLAY variable.
        at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
        at sun.awt.X11GraphicsEnvironment.<clinit>
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName
        at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment
        at java.awt.Window.<init>
        at java.awt.Frame.<init>
        at java.awt.Frame.<init>
        at javax.swing.JFrame.<init>

Em Headless Mode, aplicações podem realizar as seguintes operações:

  • Criar componentes genéricos como Canvas, Panel, Image e outros componentes leves Swing que não sejam top-level;
  • Obter informação sobre fontes disponíveis, suas métricas e configurações;
  • Definir cor para renderização de texto e gráficos;
  • Criar e manipular imagens, bem como prepará-las para renderização;
  • Imprimir usando as classes java.awt.PrintJob, java.awt.print.*, javax.print.*;
  • Emitir um bipe de áudio.

Já a tentativa de criação ou uso de componentes ou primitivas que requerem obrigatoriamente um ambiente gráfico, em Headless Mode gera a seguinte exceção: java.awt.HeadlessException. Neste caso, verifique se a operação desejada realmente pode ser executada no servidor (em modo não interativo), ou se há outra forma de fazer a operação que não necessite do modo gráfico.

Referências

- Próxima Página »