Pular para o conteúdo principal

Postagens

Mostrando postagens de 2008

Do Browser para Impressora - Considerações Finais

Problemas com XML-FO
Solução Flying Saucer
Apesar de ser apreciável a iniciativa da Apache com o XML-FO, o Apache FOP não está suficiente maduro para ser utilizado em qualquer
ocasião. Uma interessante alternativa é outro projeto que realiza uma transformação XSL mas diretamente para PDF. Esse é o projeto Flying
Saucer, que contém entre outras coisas suporte para CSS3. Para o meu problema, O Flying Saucer tem mostrado como a melhor solução em termos de precisão além de contar com qualidades como flexibilidade e eficiência.
Podemos verificar no projeto que ele faz uso do iText para gerar o arquivo PDF, mas tem a possibilidade de utilizar renderizadores para arquivos de saída diferentes.

Procedimento necessárioInstalar o Flying Saucer e suas dependências no Classpath do seu projeto. No caso de um projeto WEB, adicionar as bibliotecas no
diretório WEB-INF.
Utilizar o JAPX (The Java API for XML Processing ) para converter um arquivo XML num documento DOM (org.w3c.dom.Document).
DocumentBuilder…

Do Browser para Impressora - Parte 3

Teoricamente, recuperar a saída de um Servlet (em geral um documento em texto como o HTML, mas pode ser qualquer arquivo incluso na resposta do servidor) mesmo que seja um JSP, deveria ser fácil. O JSP é convertido em uma classe Java que segue uma interface da especificação do Java Servlet com todas os métodos necessários para recuperar sua saída. Infelizmente, as classes geradas encontram-se em um contexto que o Classloader que executa os servlets não tem acesso. Então, para acessar as saídas dos JSPs é necessário uma abordagem mais indiretas. Na arquitetura J2EE, temos os seguintes recursos à nossa disposição: Filtros: antes do envio da resposta ao cliente a cadeia de filtros intercepta a mensagem e pode enviar uma nova mensagem baseado na mensagem interceptada; RequestDispatcher.include: esse (novo) método permite um servlet programaticamente adicionar o conteúdo de outro, o que é semelhante a tag jsp:include; new URL(urlLocation).openStream: método que abre uma conexão…

Do Browser para Impressora - Parte 2

Ao invés de utilizar o browser para enviar um documento HTML para a impressora, podemos fazer uso de técnicas mais indiretas. Para isso, devemos utilizar um padrão que facilite manipulação de seu conteúdo. O padrão apropriado é o XHTML. Antes de explicar como o XHTML pode ser usado para transformação de um documentos em comandos de impressão, consideremos outros benefícios de se utilizar o XHTML no lugar do HTML.

XHTML

Uma das interessantes convergências tecnológicas é o padrão XML. O XML é uma especificação de texto com marcações derivado do SGML, que utiliza uma gramática mais restrita.

Por uma especificação de texto com marcações eu quero dizer que o XML possui marcadores que definem uma certa propriedade do texto: por exemplo que um certo fragmento é um paragrafo (Isso é um parágrafo), ou o nome de diretor de cinema(Tim Burton, etc. Por uma gramática mais restrita eu quero dizer que a definição do que pode e o que não pode no XML é mais simples. Para maiores informações veja: dife…

Filme: Obrigado Por Fumar

Obrigado Por Fumar (Thank you for Smoking) - 2006Filme escrito e dirigido por Jason Reitman, produzido por David Sacks e baseado na novela de Christopher Buckley. Duração de 92 minutos.
"Obrigado Por Fumar" é um aclamado filme, vencedor do globo de ouro 2006 e sucesso em bilheterias (com faturamento superior a 39 milhões de dólares). O filme conta a história de Nick Naylor (Aaron Eckhart), vice-presidente da empresa Academia do Estudo do Tabaco, um lobby da indústria tabagista, e como ele usa suas habilidades de persuação para defender os interesses de seus superiores.
Direção muito interessante: ao contrário do que se pode esperar, o filme não mostra um quadro contaminado por fumaça em que o próprio telespectador tenha dificuldades em respirar. Aliás, o filme não mostra nehuma pessoa fumando. Também não faz uma crítica raivosa à indústria do cigarro. Seus argumentos são sutis, inteligentes e bem-humorados. Mas, a mensagem não passa despercebida pelo público, apenas não o agri…

Where does AMD go to?

7 trimestres consecutivos no vermelho!!! E o que podemos esperar da AMD? Ok! Você pode não gostar da AMD, mas acentuar o monopólio da Intel não seria o futuro dourado para o mercado de computadores.

Acho que o pior já passou. As maiores besteiras da AMD já foram feitas. Ex: atraso de uma CPU decente por 14 meses (se é que podemos chamar o "fraco" Phenom 9950 como decente). Finalmente a AMD trouxe novidades que despertam interesse além da mera apelação de preços baixos. São eles o Chipset 780g, o Radeon HD4800 e o Ultra Puma (plataforma para notebook) .

Primeiro, o elogiado chipset 780g é o primeiro processador gráfico integrado que pode substituir uma placa-gráfica de "verdade". E ainda pode trabalhar em conjunto com as placas da série HD3400 tornando (o conjuto) comparáveis as HD3800. Sem contar que consome menos energia e são beeeem mais baratos.

Depois, a série HD4800 que desbanca a poderosa Nvidia gtx 260 e gtx 280 em dois aspectos. O primeiro aspecto é o desem…

Analisando o Debian

Já faz algum tempo que eu estudo as comunidades de software livre. Para mim, sempre foi um desafio conseguir analisá-las de uma forma sistemática e consistente. Em 2006, eu pensei em materializar meu estudo. Tive várias idéias, mas pouca coisa foi implementado. Uma dessas idéias era avaliar o "poder" de uma comunidade pela dependência que outros projetos teriam do projeto dessa comunidade. Essa análise poderia ser feita com ajuda do sistema de pacotes do Debian.
O Debian é uma das mais reconhecidads distribuições do Linux, sendo base para várias outras distribuições como Ubuntu, Knopixx, etc. O que a distribuição Debian fez, que as outras distribuições não fizeram foi trazer um sistema eficiente para instalação de programas ao Sistema Operacional. O eficiente sistema de pacotes do Debian é baseado no utilitário apt-get que antes de baixar e instalar o programa desejado com um simples comando, descobre todas as dependências (e as dependências das dependências) daquele pacote …

Ciência do Trânsito

Com todo a tecnologia que mudou a sua paisagem, o homem moderno se acostumou a olhar o congestionamento como apenas mais uma mazela urbana. Encontrar certas vias engarrafadas no final das tardes ou no começo da manhã se tornou uma rotina. Mas compreender o funcionamento dessa complexa rede de transporte afim de propor alternativas coerentes e eficientes não é uma tarefa para qualquer um.

Motivados por isso, engenheiros, cientistas e urbanistas começaram a estudar o trânsito como uma ciência. Essa é origem do livro A física do trânsito do especialista na teoria de trânsito veicular, Boris Kerner, físico pesquisador da Daimler Chrysler na Alemanha. No livro, Kerner explica que o princípio da teoria do trânsito está na definição de três fase para o trânsito.

A primeira é o que ele chama de fluxo livre (do inglês, free flow). Nas condições de fluxo livre, o motorista pode escolher a velocidade e o comportamento que desejar. Mesmo que um motorista trafegue em velocidade mais lenta, outro…

Could Reactos be good for community?

Many Foss evangelists could not understand how the ReactOS project is so important. So, despite my poor English knowledge, I will try to summarize some important questions here.

First, Open Source is about choice, freedom, words that do not go with with monopoly even when the monopolist is an open software foundation or project. The bigger the community, the more human resources it will have. However, lesser will be the voice of each member. So, conflicting ideas may lie in different communities of different sizes, proportional to its acceptance. Once implemented, that idea could seem more interesting than another and change the equilibrium of these communities to its side. So, in the long term, the fragmentation of a community could be better than a mere monopoly. And Reactos is an amazing ideia, for example, to fully use all drivers, softwares, architecture from the dominant operation system.So, many things already exist, it will be a waste to rewrite everything because of pure arr…

Do HTML para impressora - Parte 1

Certas vezes, nós nos deparamos como a necessidade de fazer um objeto de apresentação para situações bem diferentes como o Browser e a impressora. A briga é boa: podemos criar objetos especializados para cada meio ou criar um objeto versátil o suficiente para atender os meios alvos. A seguinte proposta se guia pelo segundo caso objetivando a codificação de um único código para realizar uma tarefa específica.

Imagine uma aplicação com a seguinte funcionalidade: A aplicação tem basicamente a função de buscar notas por um certo critério, exibir e imprimir a nota procurada. Um operador informa os campos chaves da nota. No passo seguinte, a aplicação devolve uma página com os dados da nota e uma formatação que mimetize ao máximo o layout originial da nota. Eventualmente, como essa nota está integrada a uma aplicação web, a página conterá outras “informações” como logo, links de navegação etc que não tem nada a ver com a nota mas apenas com a aplicação que a contém.
Sem um tratamento adequa…

Javascripting in Java

Linguagens dinâmicas apresentam várias vantagens sobre as linguagens compiladas. Uma dessas vantagens é a habilidade de adicionar código em tempo de execução com facilidade. Por exemplo, imagine um servidor que de alguma forma receba e processe comandos. Num ambiente Java (onde o servidor é um programa Java assim como os comandos são objetos Java) é um certo malabarismo com o Classloader para fazer isso.

http://www.javaworld.com/javaworld/jw-06-2006/jw-0612-dynamic.html?page=2


Enquanto que esse dinamismo é ainda “sustentável” para Classes, a situação é mais complicada para fragmentos de código. Nesse caso é preciso compilar uma classe Java e carregá-la. Com Javascript, a situação é outra. Uma vez que a linguagem é interpretada, é simplesmente trivial adicionar fragmentos de código. Para provar isso vou implementar um programa que imprime gráficos, para funções arbitrárias de uma variável x “real” (aliás, radicalmente arbitrárias... não irei nem mesmo validar se a entrada é de fat…

Objetos versus Arquivos (Squeak vs Eclipse)

Objetos ou Arquivos


No Unix, os arquivos são utilizados como a metáfora comum para uma ampla variedade de propósitos. Nesse mundo, dispositivos, processos, recursos do sistema são mostrados como arquivos. Apesar das limitações, esse é um conveniente meio de realizar diversas tarefas administrativas. Operações com direcionamento são utilizados de forma sistemática para arquivos ou dispositivos (ex: ls > ls.txt ou ls > /dev/lpt1 ). No windows, todos recursos são objetos, inclusive os arquivos. Isso também proporciona uma forma conveniente para manipular tais conceitos. Mas, não vemos no Windows a mesma facilidade de manipulação para fins administrativos que temos no Unix.

Um cenário semelhante acontece com as plataformas de desenvolvimento. De um lado, temos o Java/Eclipse, onde cada classe é representado por arquivos do SO e do outro lado, Smalltalk/Squeak as classes são objetos armazenados em memória e de alguma maneira persistido no computador (a tal imagem da área de trabalho). …

Ask me - The Smiths

Shyness is nice, and
Shyness can stop you
From doing all the things in life
You'd like to

Shyness is nice, and
Shyness can stop you
From doing all the things in life
You'd like to


So, if there's something you'd like to try
If there's something you'd like to try
ASK ME - I WON'T SAY "NO" - HOW COULD I ?


Coyness is nice, and
Coyness can stop you
From saying all the things in
Life you'd like to


So, if there's something you'd like to try
If there's something you'd like to try
ASK ME - I WON'T SAY "NO" - HOW COULD I ?


Spending warm Summer days indoors
Writing frightening verse
To a buck-toothed girl in Luxembourg


ASK ME, ASK ME, ASK ME
ASK ME, ASK ME, ASK ME


Because if it's not Love
Then it's the Bomb, the Bomb, the Bomb, the Bomb, the Bomb, the Bomb, the Bomb
That will bring us together


Nature is a language - can't you read ?
Nature is a language - can't you read ?


SO ... ASK ME, ASK ME, ASK ME
ASK ME, ASK ME, ASK ME


Because if it&…

Servlet - Mensagens Assíncronas

Meu trabalho de conclusão de curso foi sobre um sistema de comunicação de bibliotecas. Desenvolvi o trabalho inicialmente nas aulas de XP e mais tarde, junto com o co-autor da monografia, Leandro Bororo.

Todo o trabalho gira em torno de dois problemas: exportar os dados da base para um formato especial, denominado MARC, e importar os dados desse formato para o banco. Podemos separar isso na discussão legal e na discussão chata. A discussão chata é justamente os objetivos básicos do projeto supracitados. A discussão legal é como criar uma interface WEB para esse componente que permita o acompanhamento do processo de importação ou exportação. Obviamente vou falar sobre o segundo caso.

Desenvolver uma interface WEB para o MARC não é nenhum problema. No entanto, acompanhar a importação/exportação e permitir que o sistema trabalhe com arquivos grandes (mais de 10 megabytes) é outra história. A própria natureza de uma aplicação WEB torna a solução síncrona problemática. A análise de um arq…

GPGPU - Parte I

Utilizando a placa de vídeo para realizar operações matriciais.
Essa é uma idéia que ouço desde quando entrei na USP em 1998. Basicamente, as placas de vídeo são capazes de realizar operações matriciais de "uma só vez". Peço aos mais entendidos que me corrijam quando eu estiver (muito) errado.

Isso pode parecer meio estranho mas muitas das transformações de imagens apresentadas por sua placa de vídeo são série de transformações lineares. Dito isso, é um desperdício de tempo e processamento multiplicar uma matriz por outra com três laços aninhados! Aliás, é um desperdício deixar sua planilha eletrônica resolver equações lineares e outros problemas lineares computando um elemento da planilha por vez.

Chegou a hora de dar um basta nisso. Já não era sem tempo. Com avanço das placas de vídeo e das linguagens de renderização (pasmem! eu pensei que isso já seria possível a 10 anos atrás) é possível, por exemplo, multiplicar um vetor por um escalar em tempo constante.

Vamos por coloca…