quarta-feira, 22 de outubro de 2008

Site que adivinha pensamento?

Oi povo,

Depois de muito tempo sem postar, vai aqui um site bem legal que adivinha pensamentos. É isso mesmo. Você pensa em alguma coisa e o site vai te fazendo perguntas até ele te dizer em que você pensou.
http://pt.akinator.com/
Escolha seu idioma e faça um teste. É bem bacana.

Espero postar mais coisas legais daqui a alguns dias.

4br4ç05,
nglauber

terça-feira, 9 de setembro de 2008

Imagens SVG com J2ME

Olá povo,

Vê só, antes de mais nada, quero dizer que esse post é sobre um assunto que eu começei a dar uma 'fuçada' agora. Então, qaulquer besteira que eu fale, me perdoem.

No projeto em que estou trabalhando, os designers elaboraram uma tela principal da aplicação onde os ícones para acesso às funcionalidades da aplicação tinham um comportamento 'meio 3D'. Porque eu digo 'meio'? Por que ele só usava uma profundidade pra mostrar qual ícone estava selecionado.
Infelizmente o aparelho não tinha suporte pra JSR-184 (Java Mobile 3D), então tivemos que fazer as coisas usando 2D mesmo.
Conversando com um colega, ele nos sugeriu dar uma olhada em SVG (Scalable Vectorial Graphics) pra JavaME. Resolví dar uma olhada em um artigo da WebMobile que falava sobre o assunto (infelizmente agora não lembro do nome do autor do artigo) e ver o que realmente ela poderia ajudar.
O SVG é uma linguagem pra descrever imagens bi-dimensionais em XML. SVG Tiny é um subconjunto do SVG utilizado para utilizar essas imagens em dispositivos móveis. A JSR-226 define uma API para carregar, manipular e pintar esse tipo de imagem. Ela não está contida por padrão em nenhum perfil ou configuração, sendo assim, sua implementação fica à cargo de cada fabricante. Como os cálculos vetoriais são realizados com ponto flutuante, a configuração CLDC1.1 é requerida.
Essa API faz algumas 'mágicas' as quais não conseguimos com imagens bitmap, mas a maior delas é o poder de redimensionar a imagem via código. Como a imagem não passa de um arquivo texto com coordenadas relativas, basta refazer os cálculos e renderizar a imagem novamente. Isso traz um enorme benefício quando falamos em portabilidade de aplicações que usam Canvas, visto que, se usarmos esse tipo de imagem, basta fazermos o código para que essas imagens seja expandidas para que aplicação rode sem problemas em qualquer telefone, independente do tamanho da tela.
Bem, vamos a um pouquinho de prática. Segue abaixo um arquivo *.svg que pinta 3 quadrados e um texto.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd" [
<!ENTITY ns_svg "http://www.w3.org/2000/svg">
<!ENTITY ns_xlink "http://www.w3.org/1999/xlink">]>
<svg version="1.1" baseProfile="tiny" id="root" xmlns="&ns_svg;"
xmlns:xlink="&ns_xlink;" width="176" height="208"
preserveAspectRatio="none" viewBox="0 0 176 208" xml:space="preserve">

<rect id="r1" x="0" y="0" fill="#FFFFFF" stroke="#000000" width="176" height="208"/>
<rect id="r2" x="20" y="20" fill="#FFFF00" stroke="#000000" stroke-width="2" width="136" height="168"/>
<rect id="r3" x="60" y="60" fill="#FF0000" stroke="#000000" stroke-width="2" width="56" height="88"/>
<text id="xy" x="88" y="104" text-anchor="middle" font-family="Arial" font-size="10">88,104</text>
</svg>


E agora o código do canvas que carrega e pinta essa imagem na tela.

class SvgCanvas extends Canvas {

private ScalableGraphics sg;

private SVGImage svgImage;

public SvgCanvas() {
sg = ScalableGraphics.createInstance();
try {
InputStream is = getClass().getResourceAsStream
("/res/svg/retangulo.svg");
svgImage = (SVGImage)SVGImage.createImage(is, null);
} catch (Exception e) {
e.printStackTrace();
}
}

protected void paint(Graphics g) {
g.setColor(0xFFFFFF);
g.fillRect(0, 0, getWidth(), getHeight());

sg.bindTarget(g);
sg.render(0, 0, svgImage);
sg.releaseTarget();
}
}


Bem pessoal, apesar de todos esses benefícios trazidos pelas imagens vetoriais, poucos aparelhos trazem a implementação da JSR-226. E a renderização dessas imagens parece ser bem lenta, tendo em vista toda a leitura do XML e dos cálculos efetuados.
Pra finalizar, vou dar meu aval: Por enquanto, não gostei. No entanto, quem sabe com celulares mais poderosos poderemos ter esse tipo utilização de imagens mais viável.

Dêem sua opinião, porque, como eu falei, tô começando a estudar isso agora.
Maiores informações:
http://www.w3.org/Graphics/SVG/
http://www.jcp.org/en/jsr/detail?id=226
http://pt.wikipedia.org/wiki/SVG

4br4ç05,
nglauber

quarta-feira, 3 de setembro de 2008

Chegou Google Chrome!

Olá povo,

A Google, a empresa que quer dominar o mundo (se é que já não domina) lançou dia 01/09/2008 o Google Chrome, o browser da empresa.
Quem se interessar, pode baixar livremente clicando aqui.

Confesso que vou esperar um pouquinho, tendo em vista que essa é uma versão BETA, o pessoal em 2 dias já achou um furo de segurança no mesmo. Além do mais, teremos que esperar até que outras empresas tenham a boa-vontade de escrever os plugins pra ele, como os sites de bancos por exemplo.

Então, a Google lançou um browser novo. Isso é bom? Depende do ponto de vista. Por um lado é uma boa, parece que o Chrome tem um monte de 'pra que isso' e tudo mais, além de termos mais uma opção além do IE e do Firefox. Mas vocês já pensaram no problema que teremos como desenvolvedores web? Pobres de nós, vamos ter que testar em mais um browser todas as nossas funções javascript, métodos Ajax, CSS, etc. Ou você acha que tudo vai funcionar de primeira? :)

Mais um browser, e o que nós ganhamos como desenvolvedores? Mais trabalho!

P.S.: Espero me retratar em breve sobre o Chrome.

4br4ç05,
nglauber

quarta-feira, 27 de agosto de 2008

Programas úteis JavaME

Olá povo,

Bem, esse é um postzinho bem rápido. É só pra listar alguns programinhas úteis no desenvolvimento de aplicações/jogos para celular. Lá vão eles:
  • SnagIt: captura a tela do computador. É similar ao PrintScreen, porém permite gravar vídeos da tela. Isso me foi útil quando precisei contar frames de uma animação de um personagem de um jogo que estava desenvolvendo.
  • HxD: leitor de arquivos hexadecimais. Utilizei o mesmo para criar um midi (arquivo de áudio) em tempo de execução. Eu olhei como era um arquivo midi em hexa, e só foi escrever no mesmo formato.
  • mapwin: ferramenta para criação de mapas para jogos 2D. Você adiciona a imagem com os tiles (imagem com vários quadradinhos que juntas vão formar o cenário) e só é montar o mapa.
  • PNGGauntlet: otimizador de imagens PNG. Diminui bastante o tamanho do JAR de jogos ou aplicações que tenham muitas imagens.
  • JADMaker: esse aplicativozinho cria o arquivo JAD a partir de um JAR que tenha um MIDlet. Ele é util quando você quer testar um MIDlet que você baixou no emulador antes de colocar no celular.

É isso pessoal. Qualquer dúvida sobre alguma das ferramentas, comentem aí.

4br4ç05,
nglauber

segunda-feira, 28 de julho de 2008

Os frameworks são para que mesmo?

oi povo,

Como já venho postando aqui, estou dando aula de Java Web. E nesse desafio tive que estudar alguns frameworks (JSF, Hibernate, DWR, etc.), mesmo sem ser muito fã de frameworks. Como programo para celulares e fico chorando alguns míseros bytes de memória, camadas e mais camadas de software uma em cima da outra me dá muito medo! :)
Sem sombra de dúvida que ao menos um pouco eles agilizam o desenvolvimento pra web, mas a que custo também viu.
A minha última experiência foi colocar o Ajax4JSF pra funcionar. Depois que a JBoss incorporou essa biblioteca no seu richfaces, não ficou nada facinho colocar ele pra funcionar (pelo menos eu não achei).
Então achei em algum blog aí da vida (como esse), como configurar o Ajax4JSF, e aí resolví compartilhar com vocês. Além dos jars do JSF, são necessários:

richfaces-3.0.1.jar
ajax4jsf-1.1.0.jar
oscache-2.3.2.jar

E nessas versões específicas! É isso mesmo, se colocar com a versão 1.1.1 não funciona! Mas a 1.1.0 funciona...

Tudo pela "agilidade" e "facilidade" no desenvolvimento.

4br4ç05,
nglauber

sexta-feira, 25 de julho de 2008

Idéias me impressionam

Olá povo,

O que eu acho mais interessante na maioria das grandes ideias não é o quão isso vai melhorar na vida dos outros, mas sim como elas são óbvias.

Toda vez que alguém vai tirar uma foto de outra pessoa, alguém ainda diz aquela velha frasesinha: "Digam X".
Entretanto, com a nova câmera Sony T200 (smile shutter) essa frase (e outras parecidas) pode estar com os dias contados. A câmera tem 8 mega pixels e como seu nome diz ela captura o sorriso das pessoas da foto e tira a foto automaticamente. É isso aí, você não precisa mais clicar, é só esperar todo mundo sorrir. Eu disse isso mesmo, todo mundo. Isso porque você pode ter várias pessoas na foto e ainda dizer pra quais pessoas na foto esse recurso estará habilitado. Também é possível configurar o nível do sorriso que deve ser capturado.
Ele faz isso através de um algoritmo de reconhecimento de face.

Dêem uma olhada nesse vídeo (procurem mais no YouTube):


Vou usar uma frase muito famosa em homenagem a essa câmera:
"O que mais faltam inventar?" :)

4br4ç0s,
nglauber

terça-feira, 15 de julho de 2008

Por que o Linux é assim?

Olá povo,

Acho que vou arrumar uma grande encrenca com o pessoal que gosta de Linux, mas lá vai. Os amantes do Linux podem me responder por que eles não fazem as coisas ser mais simples? O pessoal acha que dá status saber digitar instruções no terminal?
Existem um milhão de exemplos onde pro usuário - e entendam usuário como qualquer um que vai usar o Linux - instalar qualquer coisa no Linux é um parto! Mas meu exemplo foi o Tomcat ontem na aula de JavaWeb. Não foi um parto, mas tive que "pedir pinico" pro professor de Linux. Pra configurar uma variável de ambiente tem que entrar no bashrc Glauber! Ótimo! Como não pensei nisso antes? Mas, que tal aquela opção do Windows: Meu Computador | Propriedades | Avançado | Variáveis de Ambiente ?
Por que diabos eles não criam aqueles Wizards bonitinhos?

Ah! Deixa pra lá. Parece meio profético, mas já faz tempo que eu digo: Todo mundo reclama do Windows e de Bill Gates, mas ninguém deixa de usar Windows, Office, MSN, etc. em casa.
É meu amigo Linux, fica no servidor mesmo que é lá onde tem gente que é especialista em VI. Ou nos terminais de lojas e postos de gasolina, porque só tem aquele sisteminha da loja que os usuários usam e pronto, e o dono não paga nada!

Viva o Windows (se fosse free era melhor ainda)!
4br4ç05,
nglauber

sexta-feira, 11 de julho de 2008

Programar pra web é fácil...

Olá povo,

Estou escrevendo esse post às 02:34 do sábado enquanto estou baixando o Hibernate aqui em casa. E à essas horas vem aquela inspiração, sabe como é né?
Preparando minhas próximas aulas de Java Web percebí uma coisa: desenvolver pra web nunca foi tão difícil. Vocês já pararam pra analisar quantos JARs a gente tem que baixar pra fazer as coisas funcionarem? Quantos frameworks nós temos que usar? Claro que eu estou falando de implementar um projeto com todos aqueles requisitos técnicos de arquitetura, padrões, manutenibiilidade, etc.
Quem me conhece sabe que eu adoro padrões de projeto, UML, análise e projeto, essas coisas. Mas de vez em quando dá uma saudade de uma boa e velha conexão JDBC dentro de um scriptlet JSP.
Só pra vocês terem uma idéia, olha só o que eu já baixei só para minhas aulas de Java Web:
  • commons-email-1.1-bin.zip
  • commons-fileupload-1.2.1-bin.zip
  • commons-io-1.4-bin.zip
  • jaf-1_1_1.zip
  • jakarta-taglibs-standard-1.1.2.zip
  • james-binary-2.3.1.zip
  • javamail-1_4_1.zip
  • jsf-1_1_01.zip
  • mysql-connector-java-5.1.6.zip
  • xalan-j_2_7_1-bin.zip
  • hibernate (que eu estou esperando terminar de baixar)

Isso sem contar que eu não vou falar de Struts e de Spring, e ainda falta a parte de Ajax com DWR.
Pessoal, é isso, hoje pra você desenvolver pra web você só tem que saber isso: Servlets, JSP, JSTL, Struts, JSF, Hibernate, Spring, MyFaces, Tomahawk, ...

4br4ç05,
nglauber

IPhone


Olá povo,

Eu adorei uma frase que um ex-professor meu da faculdade colocou no MSN. E acho que ela se aplica perfeitamente a mim também. A frase é: "Posso estar certo ou errado, mas nunca estou em dúvida".
Deixa eu explicar essa introdução poética. Todo mundo está fazendo o maior estardalhaço em cima do IPhone. Eu particularmente não gosto muito do dito cujo - pelo menos por enquanto. Segue abaixo uma lista das minhas reclamações :)
- acho que estou no grupo dos poucos que não curte esse lance de "touch-screen". Porque não tem aquele "feeling" de pressionar alguma coisa. E se eu tivesse um IPhone ele ficaria cheio de marca de dedo com óleo da minha pele.
- como desenvolvedor não posso aceitar que o bendito do IPhone não rode nem Java nem Flash. Fala sério né?
- o danadinho é grande e pesado também.
- a bateria é uma decepção, se usar 3G e Wi-Fi não chega ao final do dia sem ter que recarregar.

Bem, como eu sei que ninguém vai usar esse blog como critério de avaliação pra comprar o IPhone, esse link pode ajudar a quem for compra-lo.

Ah! Antes que alguém fale que eu estou "malhando o pau" no IPhone porque eu não tenho grana pra comprar um, eu digo duas coisas: a primeira é que é verdade :) e a segunda é que, com certeza o IPhone é melhor do meu Nokia 6111 :)

[Editado em 16/02/2011]
É... eu estava errado... O iPhone, iPod e iPad são ótimos, assim como os Android.

[Editado em 22/07/2013]
Acabo de comprar um iPhone 5 :)

4br4ç05,
nglauber

Mamonas Assassinas


Olá povo,

Antes de mais nada eu queria dizer que eu pensei muito antes de postar isso aqui, e que esse vai ser um blog sobre minha vida profissional, ou quase isso.
Mas tive o orgulho de ver - e ouvir - os Mamonas Assassinas, e não podia ficar sem deixar minha sincera homenagem àqueles que fizeram todo o Brasil sorrir, mesmo ainda que por pouco tempo.
Achei muito bacana o programa "Por toda minha vida" exibido na Rede Globo ontem, e depois de ver o programa e um monte de vídeos sobre Mamonas no YouTube, resolví colocar esse post.
Dinho, Bento, Julio, Samuel e Sérgio, valeu pela alegria que vocês trouxeram pra todos.

4br4ç05,
nglauber

quarta-feira, 9 de julho de 2008

JavaMail e CommonsMail

Olá povo,

Estou lendo atualmente o livro de JavaWeb do Edson Gonçalves Desenvolvendo Aplicações Web com JSP, Servlets, JSF, Hibernate, EJB e Ajax. Um grande livro por sinal, que adotei para minhas aulas.
Porém, quando estava lendo o capítulo sobre envio de e-mails, o exemplo do livro não funcionava nem com reza braba. E o pior de tudo, não dava nenhuma exception. O código usava o servidor JAMES (http://james.apache.org/) pra enviar e-mails desse servidor, local, pra outros e-mails.
Depois de procurar que nem um doido na internet, resolví falar com o autor do livro. Ele tinha resolver meu problema, era obrigação dele (rsrsrs).
Mandei um e-mail pra ele, e ele foi muito atencioso e me mandou a resposta salvadora. O problema é que os provedores (como a Speedy por exemplo) bloqueiam esse tipo de envio. Me conformei e usei o servidor do G-Mail mesmo.
Segue abaixo o JSP que usa o commonsmail (http://commons.apache.org/email/) pra enviar um email simples. Mas lembrem-se pessoal, não usem pra spam.

<%@ page language="java" contentType="text/html" pageEncoding="ISO-8859-1"
import="org.apache.commons.mail.SimpleEmail"%>
<html>
<head>
<title>Enviando e-mails com Commons e-mail</title>
</head>
<body>
<%
SimpleEmail email = new SimpleEmail();
email.setDebug(true);
email.setHostName("smtp.gmail.com");
email.setSmtpPort(465);
email.setDebug(true);
email.setTLS(true);
email.setSSL(true);
email.setSslSmtpPort("465");
email.setAuthentication("usuarioDoGmail","senhaDoGmail");
email.addTo("destinatario@hotmail.com");
email.setFrom("qqeremaildeorigem@gmail.com");
email.setSubject("Mensagem de Teste");
email.setMsg("Teste de e-mail utilizando commons email");
email.send();
%>
<h2>E-mail enviado com sucesso.</h2>
</body>
</html>

Isso resolveu meus problemas, finalmente!!!
4br4ç05,
nglauber

Primeiro post

Oi povo,

Bem depois de 6 anos me ferrando de trabalhar com T.I., resolví criar esse blog pra postar todas as minhas "aventuras".
Putz, fala sério, passar um dia ou até mais com uma bronca no seu código (quem já não passou por isso hein?) é ou não é uma aventura?

Uma dessas minhas aventuras é ser instrutor de Java na Especializa Treinamentos (http://www.especializa.com.br/), o que vem me trazendo uma grande felicidade por estar sempre com os conhecimentos em dia e por estar passando o pouco que eu sei pra galera que tá começando.

É isso aí povo, espero agora que eu tenha tempo de postar as coisas.

4br4ç05,
nglauber