Archive

Archive for the ‘Java’ Category

Dojo Piauí 2012

Informações sobre o nosso último DOJO do dia 30/05 podem ser acessadas em:

http://dojopi.wordpress.com/2012/06/05/coding-dojo-phb-2012-1-ordena3/

Esse foi nosso primeiro DOJO de 2012. Que possamos ter muitos outros pela frente…

Infelizmente com a dificuldade de transporte, tivemos poucos participantes.
Parabéns aos que conseguiram marcar presença!!!

Para o nosso próximo DOJO (06/06/2012), o IFPI vai disponibilizar o seu micro-ônibus. Assim, o micro-ônibus do IFPI passará pela rodoviária na quarta-feira um pouco antes das 15h para levar os alunos interessados no DOJO para o IFPI. Ao final do DOJO, o ônibus levará os alunos de volta à rodoviária.

Participem e divulguem (amigos, Facebook, Twitter, Grupos/Listas de discussão, etc.)!!!

Categorias:Dojo, Java Tags:, ,

Scala: uma poderosa e elegante linguagem sobre a JVM

Fiquei impressionado com a performance e com os recursos oferecidos pela linguagem Scala. Ela funciona sobre a JVM, é estática e tem excelente integração com a linguagem Java. É possível ter uma idéia de sua performance a partir dessa comparação informal que fiz com outras linguagens de programação. Inclusive já existem alguns frameworks Web escritos em Scala: Lift, Scalatra e Pink.
No blog da Caelum extraí esses interessantes trechos sobre Scala:


(…)
Scala é uma linguagem de programação moderna – sua primeira versão é de 2003 – e procura vencer as batalhas da concorrência num campo familiar: a JVM. Comprometida com o pragmatismo, Scala não é uma linguagem funcional pura, mas híbrida, procurando unir o que há de mais avançando em orientação a objetos com conceitos funcionais. Foi criada pelo professor Martin Odersky, que tem a distinção de ser o autor do compilador de Java do JDK, e vem sendo desenvolvida pela sua equipe na universidade suíça EPFL.

(…)
Código Scala compila para bytecodes java normais, e é trivial invocar código Java de Scala e vice-versa. Tamanha integração com o ambiente Java levou o criador de Groovy, James Strachan, a especular que Scala é o melhor candidato a substituir Java no longo prazo. Não contente com esta polêmica, Strachan ainda afirma que se conhecesse Scala na época, não teria enxergado a necessidade da criação do Groovy. O próprio James Gosling afirmou que escolheria por Scala se tivesse de optar por outra linguagem.

(…)
Para quem quiser saber mais sobre Scala, o tour da linguagem é um bom recurso para matar a curiosidade. Mas é claro que o melhor meio de conhecer uma linguagem é meter a mão na massa, e para isso recomendo o tutorial First Steps to Scala, de autoria do próprio Martin Odersky colaborando com Bill Venners e Lex Spoon. Esse tutorial foi extraído de trechos do livro Programming in Scala, dos mesmos autores.

(…)
Fonte: http://blog.caelum.com.br/scala-sua-proxima-linguagem/

Para finalizar, Charles Nutter (criador do JRuby) afirma que nenhuma outra linguagem na JVM parece tão capaz de ser um “substituto para Java” como Scala.

Apostilas gratuitas da K19 disponíveis para download

A K19 Treinamentos está disponibilizando gratuitamente 5 apostilas relacionadas à programação Java:

  1. Lógica de Programação
  2. Orientação a Objetos em Java
  3. Persistência com JPA2 e Hibernate
  4. Desenvolvimento Web com JSF2 e JPA2
  5. Desenvolvimento Web Avançado com JSF2, EJB3.1 e CDI

O download pode ser realizado a partir do endereço a seguir:

http://www.k19.com.br/downloads/apostilas-java

Até o final do semestre, a primeira versão de todas as apostilas estarão disponíveis gratuitamente (hoje são cinco apostilas liberadas).

No segundo semestre, todo o material será revisado para que no final do ano uma segunda versão de cada apostila esteja disponível.
Vale a pena conferir…

Categorias:Java, Programação Tags:,

Criador do Hibernate e Seam propõe nova linguagem estática sobre a plataforma Java

Gavin King, o criador do Hibernate e do JBoss Seam está propondo uma nova linguagem estática para rodar na máquina virtual Java. A nova linguagem se chama Ceylon e deve ser lançada ainda este ano pela Red Hat.
Vem para sanar algumas limitações da linguagem Java e busca deixá-la mais moderna, mais simples e menos burocrática.

Mais detalhes em: http://www.linuxmagazine.com.br/lm/noticia/conheca_o_ceylon
Os slides da apresentação do Gavin King sobre Ceylon podem ser baixados em: http://in.relation.to/service/File/19159

Categorias:Java, Programação Tags:,

Encriptação / Decriptação simples em Java

Abaixo um exemplo bem simples de encriptação / decriptação simétrica em Java usando AES / DEAES:

import javax.crypto.*;
import javax.crypto.spec.*;

public class Encripta {
    public static void main(String[] args) {
        try {
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            byte[] mensagem = "minha mensagem original".getBytes();

            // Usando chave de 128-bits (16 bytes)
            byte[] chave = "chave de 16bytes".getBytes();
            System.out.println("Tamanho da chave: " + chave.length);

            // Encriptando...
            cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(chave, "AES"));
            byte[] encrypted = cipher.doFinal(mensagem);

            // Decriptando...
            cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(chave, "AES"));
            byte[] decrypted = cipher.doFinal(encrypted);

            System.out.println(new String(decrypted));
        } catch (Exception e) {
           e.printStackTrace();
        }
    }
}

Veja também: http://stackoverflow.com/questions/992019/java-256bit-aes-encryption

 

Comparação de performance

Com a ajuda de alguns amigos, fizemos uma comparação de performance bem simples e muito distante de ser um benchmark confiável entre algumas linguagens/versões usando o fibonacci de 35. Também foi realizado o fibonacci de 45 nas linguagens com melhor performance. Foi somente uma experiência e o resultado em minha máquina foi esse:

gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) – fib.c – fib2
Compilação otimizada usando: gcc -O3 -o fib2 fib.c (contribuição de Filipe Saraiva)
./fib2 35
Tempo: 0.124780
Resultado: 9227465
./fib2 45
Tempo: 15.655936
Resultado: 1134903170

Scala 2.7.7final – Fib1.scala (contribuição do Matheus Moreira)
scala Fib1 35
Tempo: 0.137780472
Resultado: 9227465
scala Fib1 45
Tempo: 19.697318756
Resultado: 1134903170

Java(TM) SE Runtime Environment (build 1.6.0_24-b07) – fib.javafib.class
java fib 35
Tempo: 0.146963799
Resultado: 9227465
java fib 45
Tempo: 20.793879543
Resultado: 1134903170

Free Pascal Compiler version 2.4.0-2 [2010/03/06] for x86_64 – fib.pas – fibp (contribuição do Nécio Veras)
Compilação otimizada usando: fpc -O3 fib.pas -ofibp
./fibp 35
Tempo: 0.221000001
Resultado: 9227465
./fibp 45
Tempo: 30.445999150
Resultado: 1134903170

gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) – fib.cfib
Compilação não otimizada usando: gcc -o fib fib.c
./fib 35
Tempo: 0.276678
Resultado: 9227465
./fib 45
Tempo: 32.527250
Resultado: 1134903170

Groovy Version: 1.8.0 JVM: 1.6.0_24 – fib2.groovy (contribuição do Wanderson Santos)
groovy fib2.groovy 35
Tempo: 0.290426544
Resultado: 9227465
groovy fib2.groovy 45
Tempo: 33.457977715
Resultado: 1134903170

Haskell – The Glorious Glasgow Haskell Compilation System, version 6.12.1 – fib.hsfibh (contribuição do Diego Victor com correção da Mônica Regina da Silva)
Compilado usando: ghc –make -O3 fib.hs -o fibh
./fibh 35
9227465
0.317424
./fibh 45
1134903170
40.989142

Ruby  – Rubinious 1.2.1dev (1.8.7 f4c08fbe 2010-12-21 JI) [x86_64-unknown-linux-gnu] – fib.rb
ruby fib.rb 35
Tempo: 1.339709
Resultado: 9227465
ruby fib.rb 45
Tempo: 158.686395
Resultado: 1134903170

JRuby 1.5.3 (ruby 1.8.7 patchlevel 249) (2010-09-28 7ca06d7) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_20) [amd64-java]fib.rb
jruby fib.rb 35
Tempo: 4.371
Resultado: 9227465

Groovy Version: 1.8.0 JVM: 1.6.0_24 – fib.groovy (contribuição do Luís Bruno)
groovy fib.groovy 35
Tempo: 5.106544505
Resultado: 9227465

Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio – fib.lua (contribuição da Mônica Regina da Silva)
lua5.1 fib.lua 35
Tempo: 5.36
Resultado: 9227465

Ruby 1.9.1p378 (2010-01-10 revision 26273) [x86_64-linux] – fib.rb
ruby1.9.1 fib.rb 35
Tempo: 6.81764046
Resultado: 9227465

Ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]fib.rb
ruby fib.rb 35
Tempo: 7.65983433
Resultado: 9227465

Groovy Version: 1.7.5 JVM: 1.6.0_20fib.groovy (contribuição do Luís Bruno)
groovy fib.groovy 35
Tempo: 8.653575988
Resultado: 9227465

Python 2.6.5 – fib.py
python fib.py 35
Tempo: 0:00:11.448263
Resultado: 9227465

Python 3.1.2 – fib.py
python3.1 fib.py 35
Tempo: 0:00:12.620807
Resultado: 9227465

Ruby 1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux] – fib.rb
ruby fib.rb 35
Tempo: 34.993339
Resultado: 9227465

Agradecimentos especiais aos amigos que contribuíram com as seguintes implementações:

Groovy – Luís Bruno / Wanderson Santos / Thiago Witt
Haskell
– Diego Victor (com correção da Mônica)
Lua – Mônica Regina da Silva
Pascal – Nécio Veras
Scala – Matheus Moreira / Thiago Witt

O Thiago Witt contribuiu com versões Groovy e Scala extramamente otimizadas usando Tail-call. Foi tão otimizado que resolvi testar o fibonacci de 10000:

Scala 2.7.7final – Fib2.scala (contribuição do Thiago Witt – Tail-call)
scala Fib2 10000
Tempo: 0.09665077

Groovy Version: 1.8.0 JVM: 1.6.0_24 – fib3.groovy (contribuição do Thiago Witt – Tail-call otimizada para evitar StackOverFlow)
groovy fib3.groovy 10000
Tempo: 15.135361192

O Thiago Witt também contribuiu com uma versão em Groovy extramamente otimizada, mas que dá StackOverflow para números grandes. Assim, testei as versões Tail Call com fibonacci de 4000:

Scala 2.7.7final – Fib2.scala (contribuição do Thiago Witt – Tail-call)
scala Fib2 4000
Tempo: 0.062994021

Groovy Version: 1.8.0 JVM: 1.6.0_24 – fib4.groovy (contribuição do Thiago Witt – Tail-call)
groovy fib4.groovy 4000
Tempo: 0.14749984

Groovy Version: 1.8.0 JVM: 1.6.0_24 – fib3.groovy (contribuição do Thiago Witt – Tail-call otimizada para evitar StackOverFlow)
groovy fib3.groovy 4000
Tempo: 2.789794005

Lições aprendidas sobre RMI

Após um trabalho sobre RMI, desejo compartilhar as seguintes lições aprendidas:

1. Não é possível registrar em um determinado registry um objeto que esteja em outra máquina

2. Quando houver problemas de conexão em relação ao endereço publicado pelo servidor (Connection refused to host: 127.0.1.1) deve-se passar a propriedade java.rmi.server.hostname para a máquina virtual Java:
java -Djava.rmi.server.hostname=192.168.0.116 LigadorImpl
java -Djava.rmi.server.hostname=192.168.0.117 ServidorTempoImpl 192.168.0.116

3. Se for usado algum SecurityManager é preciso criar um arquivo que determina a política de segurança e dizer isso para o RMI através da propriedade java.security.policy:
java -Djava.rmi.server.hostname=192.168.0.116 -Djava.security.policy=security.policy LigadorImpl

Um exemplo de arquivo security.policy que garante todas as permissões é dado abaixo:

grant { 
  permission java.security.AllPermission;
};

Entretanto, se for para dar todas as permissões, é melhor não usar nenhum SecurityManager.

%d blogueiros gostam disto: