Mostrando postagens com marcador java. Mostrar todas as postagens
Mostrando postagens com marcador java. Mostrar todas as postagens

22.3.07

Closures no Java 7

Uma série de exemplos de como deve funcionar a especificação de closures que deve sair no Java 7, de acordo com a especificação de closures para Java. No mínimo, bem esquisito... :)

20.3.07

PHP no Java 6

Um tutorial rápido sobre o Quercus - um engine para execução de código PHP 5.0 usando a nova especificação de script engine (JSR 223).

19.3.07

Novas Collections no Java 6!

Aqui você encontra um quickstart bem legal sobre as novas interfaces de collections do Java 6: em resumo, uma nova interface de "fila dupla" (double ended queue, ou Deque) e duas novas interfaces para maps/sets que permitem a "filtragem" de elementos (por exemplo, pegar todos os elementos de um set que sejam menores que 10).
O rant do dia vai para a incrivelmente bem bolada interface Deque, que oferece dois métodos para adicionar, dois para remover, dois para pegar o primeiro elemento e dois para pegar o último. A interface Queue havia sido adicionada no Java 5 com um método para adicionar elementos (offer()) e dois para recuperar (peek(), que não remove da fila, e poll(), que retorna e remove). Pois bem, a Deque foi muito mais além oferecendo (além dos já esperados peekFirst, e poolFirst, já que estamos falando de uma fila de mão dupla) mais um monte de novos métodos: addFirst, removeFirst, addLast, removeLast, offerLast, poolLast, peekFirst, peekLast. Pra que tanto método? Para poder oferecer um set de métodos que retorna false quando não foi possível adicionar/remover e outro que lance exceptions quando isto ocorrer.
Simplesmente formidável! Tenho certeza que pelo esta grandiosa interface múltipla vai ter pelo menos um uso: pegadinha em prova de certificação.

16.3.07

Vem aí: mais uma API Java para manipulação de datas

Todo programador Java já passou pelo trauma que é manipular datas no Java. Constatar que Janeiro é o mês zero. Perceber que objetos Date são representações absolutas de tempo (milissegundos transcorridos desde 1 de janeiro de 1970), mas as vezes quando você serializa a data de lá pra cá (especialmente através de drivers jdbc), os milissegundos mudam. Descobrir que não existe um jeito conveniente de calcular diferença de dias (ou horas, ou minutos) entre dois períodos. Sem falar nas infindáveis dores de cabeça causadas por bugs na tabela de horário de verão.
Agora a Sun anunciou a cura de todos os problemas: um novo JSR todinho para implementar uma nova API de data/hora para o Java!
Tudo que eu precisava. Mais uma API que faz a mesma coisa, e mais uma vez desenvolvida por um comitê. Mal posso esperar.

14.3.07

Ruby para Javeiros: classForName()

Um dos recursos mais utilizados do pacote de reflection do Java, o classForName permite instanciar uma classe sabendo apenas o seu nome. Praticamente todo programador Java já utilizou este método - mesmo que sem perceber, para localizar drivers JDBC.
No Ruby, classes são símbolos - e a sua carga dinâmica pode ser feita da mesma forma que qualquer outro símbolo: utilizando-se o método const_get(), definido na classe Module.
O fato de basicamente tudo no Ruby "extender" Module de uma forma ou de outra faz com que o const_get() possa ser usado de maneiras bem feias: trata-se basicamente de um método estático de qualquer classe!
Um exemplo básico de como inicializar uma classe a partir de seu nome:

class Bla
def initialize
puts "tada!"
end
end

instancia = Module.const_get("Bla")
puts instancia.class => "Bla"


ou então, quem sabe, de um jeio mais elegante:

instancia = Kernel.const_get(:Bla)

Bonito. Mas ei, e se meu objetivo for escrever código ilegível???

instancia = "yadayada".class.const_get "Bla"

ah... Muito melhor agora. As vezes essa flexibilidade toda do Ruby cai como uma bela feijoada antes de dormir...

10.3.07

Trocando a roupa de um Mamute (sem parar a boiada)

Como o Wal-Mart promoveu a migração de seu site (um dos mais visitados do mundo, diga-se de passagem) para o Java 5.0 - sem pânico e sem tiros no escuro.

6.3.07

JRuby 0.9.8

Saiu! A nova versão do JRuby suporta Rails, ja cobre com sucesso 98% dos test cases da linguagem original e solucionou diversos problemas de performance da versão anterior. E a versão 1.0 já está a caminho...

24.1.06

Faixa preta em JAVA

Isso mesmo que você esta lendo: faixa preta em Java ! Neste site a cada pergunta que repondida é um ponto ganho, com o passar dos pontos você vai evoluindo até ganhar a faixa preta. Para ganhar a faixa preta não é facil, tem que ter conhecimento das APIs Java (JSF, JavaMail, Java2D, ...), produtos e ferramentas (ant, Xdoclet, Junit, ...), frameworks (JDom, Struts, Hibernate, ...), designer patterns e outros(Xml, UML, HTML, ...).
Boa diversão pequenos faixa branca.

29.12.05

Ah, essas crianças de hoje...

Joel Spolsky comenta sobre os perigos de ensinar apenas Java nas universidades, e por que você deve aprender ponteiros e programação funcional para ser um bom programador.

Pequeno trecho para atiçar os ânimos:
The recruiters-who-use-grep, by the way, are ridiculed here, and for good reason. I have never met anyone who can do Scheme, Haskell, and C pointers who can't pick up Java in two days, and create better Java code than people with five years of experience in Java, but try explaining that to the average HR drone.

24.10.05

Totally Gridbag...

Ah, os Layouts do Java... Todos tão úteis e fáceis de usar!

6.10.05

Groovy Development

Artigo explicadinho sobre a linguagem de scripting Groovy, uma das linguagens desenvolvidas para rodar em cima da VM do Java.

25.8.05

Acegi Security

Um framework de segurança impressionante e muito bem documentado para uso com o Spring Framework.

Summary: Acegi Security is an open source project that provides comprehensive authentication and authorisation services for enterprise applications based on The Spring Framework. Acegi Security can authenticate using a variety of pluggable providers, and can authorise both web requests and method invocations. Acegi Security provides an integrated security approach across these various targets, and also offers access control list (ACL) capabilities to enable individual domain object instances to be secured. At an implementation level, Acegi Security is managed through Spring's inversion of control and lifecycle services, and actually enforces security using interception through servlet Filters and Java AOP frameworks. In terms of AOP framework support, Acegi Security currently supports AOP Alliance (which is what the Spring IoC container uses internally) and AspectJ, although additional frameworks can be easily supported.

19.8.05

Drivers JDBC

Uma lista com os mais comuns drivers JDBC disponíveis, e instruções de uso. Um bookmark interessante!

15.8.05

John Carmack e o J2ME

Falando nele, encontrei este post no seu blog que fala sobre a experiência de desenvolver jogos para celulares, principalmente usando Java. Tanto os pontos positivos quanto negativos são ressaltados, além de alguns comentários sobre as diferenças entre o desenvolvimento de jogos megalomaníacos para PC e os bem limitados que cabem nas plataformas móveis atuais. Ele também fala um pouco de como surgiu a idéia do DoomRPG.

Alguns trechos para atiçar os ânimos:

The biggest problem is that Java is really slow. On a pure cpu / memory / display / communications level, most modern cell phones should be considerably better gaming platforms than a Game Boy Advanced. With Java, on most phones you are left with about the CPU power of an original 4.77 mhz IBM PC, and lousy control over everything.


[...]


Write-once-run-anywhere. Ha. Hahahahaha. We are only testing on four platforms right now, and not a single pair has the exact same quirks. All the commercial games are tweaked and compiled individually for each (often 100+) platform. Portability is not a justification for the awful performance.

11.8.05

Upgrading to Hibernate 3

Certo dia você acorda, inspirado, temerário e sentindo-se o mais confiante dos geeks.

- Já sei! Vou fazer um upgrade na camada de persistência de nosso sistema! Deixa eu só baixar o Hibernate 3...


Nem tudo são flores. O último release do Hibernate agregou tantas mudanças arquiteturais e conceituais que a equipe do projeto achou por bem eliminar a compatibilidade (backward compatibility). Para o desespero dos desinformados...

O artigo Upgrading to Hibernate 3 - a war story é um relato de quem já teve que passar pela atualização e sobreviveu. Sem maiores traumas, e sem noites sem dormir.

10.8.05

'Write once, run anywhere' not working for phones

O padrão J2ME foi definido e proposto para evitar que a grande variedade de form factors dos dispositivos móveis tornasse o desenvolvimento de aplicações um inferno de incompatibilidades e versões dedicadas. O resultado: um padrão muitíssimo limitado (MIDP 1.0), seguido por um padrão visualmente mais flexível, mas com severas restrições de acesso a recursos de hardware (MIDP 2.0). O MIDP 3.0 vem por aí, e (mais uma vez) promete ser a solução de todos os problemas. Mas com os dispositivos móveis evoluindo mais rápido do que qualquer outro dispositivo computacional da história, será que o padrão vai chegar a tempo?

Este artigo do cnet.com debate o problema e, como sempre, joga lenha na eterna (e cansativa) discussão "Java versus qualquer outra coisa"...

7.8.05

J2ME Polish

Uma ferramenta de build que permite "polir" aplicações J2ME, adaptando-as a dispositivos com características específicas, com um mecanismo meio estranho de tags (macros?) espalhadas pelo código da aplicação.
O site também inclui uma relação de devices J2ME, incluindo as APIs que eles implementam.

4.8.05

MIDP 3 Use Cases - Java ME Developer community input

The MIDP3 Expert Group (EG) is currently in the process of defining use cases to be used as the basis for the MIDP3 requirements definition.

The EG considers your feedback/input on use cases important.

To capture your input, a new bucket has been created on the J2ME Devcommunity Wiki. Use cases that are captured will be passed on to theMIDP3 Expert Group for consideration.

Before posting your use cases, please read existing entries to avoid duplicates. Also, please followed the specified format.

You can find the "JSR 271 MIDP3 Developer Community Use-CasesRepository" on the main Wiki clone page @ http://www.j2medeveloper.com/wiki.

2.8.05

Mentawai 1.1

Foi lancado uma nova versão deste framework WEB "made in Brazil". As novas features vão desde autorização, IoC e file upload até diversas melhorias e ajustes.

Para quem não conhece, o Mentawai vem com uma proposta de ser um framework com uma curva de apredizagem bem pequena para aquelas pessoas que não tem tempo a perder aprendendo um framework novo. Só para ter uma ideia, ele chegou a abolir o uso de XML para as suas configurações.

29.7.05

Genéricos: Mais críticas

Como eu sou o principal responsável por evitar que esse site se torne uma espécie de "Java Partyline", aqui vai mais um artigo criticando a implementação de genéricos na linguagem. É um comentário de Bruce Eckel sobre o artigo de Ken Arnold do qual eu falei neste post. Um trecho para abrir o apetite:

As much as Java people like to dis C++ for just about everything, C++ templates are much more straightforward than Java generics, because they are consistent. With erasure, you have to constantly remind yourself that you only think you know what a particular parameterized type is. But because you don't really (except sometimes), it causes all kinds of confusion. And a programming language is supposed to be an abstraction to reduce confusion, so Ken's comment about complexity: "I don't see that the value is there to justify the cost," is legitimate.


Vale lembrar que Eckel e Arnold são dois famosos expoentes da comunidade Java, autores de livros importantes sobre a linguagem (Arnold é co-autor do oficial "The Java Programming Language"), e não outsiders.

Eu acho que os genéricos foram implementados da melhor maneira possível considerando o requerimento de não quebrar a compatibilidade, e para conseguir isso foi necessária tanta teoria que um programador médio não faz nem idéia. Mas teria sido provavelmente melhor se a Sun não tivesse se preocupado tanto com compatibilidade e planejado uma forma de transição para que o código antigo continuasse a interoperar com o novo. Vai saber, evoluir um sistema muito utilizado é complicado de qualquer forma.