Turma Java Básico Indra 2015

Java Básico Indra Company.
Olá Pessoal,
   Hoje foi a primeira aula da turma de Java Básico que estou ministrando pela Indra Company do Brasil, estiveram presentes vários programadores que trabalham para o grupo segurador BB e Mapfre, e basicamente neste curso a ideia é ensinar orientação a objeto e um pouco da linguagem Java. Diferentemente do curso que costumava ministrar pela Globalcode, este tem um formato mais simples e direto, principalmente porque temos apenas 5 dias para apresentar a sintaxe e estruturas fundamentais de um programa Java, além disso, durante o curso iremos trocar bastantes experiencias, especialmente sobre problemas que todos tenham passado em ambiente produtivo.
   Vale mencionar ainda que nesta turma temos a presença de vários programadores VB, então todo cuidado é pouco para não deixar as coisas meio confusas em suas cabeças.    
Vamos em frente que o ano esta apenas começando !
Moving Foward !
Abrcs.
Natanael Fonseca

Minecraft ( Java Game )

      Minecraft é um Jogo criado por Markus Persson e que foi totalmente desenvolvido usando Java, uma coisa curiosa sobre este jogo é que seu criador conta que quando publicou este jogo para download pela primeira vez, ficou surpreso pelo que aconteceu, houveram vários downloads em pouquissimas semanas, ou seja, foi um sucesso imediato.
       É um jogo que não conquista pela qualidade dos gráficos, afinal, é de longe um jogos mais feios que alguém pode jogar atualmente, contudo, conquista principalmente pela diversão e jogabilidade.
           Logo abaixo, um video retirado do youtube e que ajuda a entender esse game :

Site Oficial

Abrcs.
Natanael Fonseca

HoneyComb e Android Market

Olá pessoal,


      Recentemente tive a oportunidade de ter em minhas mãos um Samsung Galaxy Tab 10.1, foi através deste dispositivo que andei dando uma “fuçada” no Android Market e na plataforma Android “HoneyComb”,  pois bem,  neste post pretendo comentar um pouco sobre a minha experiência com este tabblet e como foi esse pequeno encontro de 30 dias ;).
      Pra começar, me decepcionei um pouco com a tela,  acho que pra quem está acostumado com o Ipad, sente-se de forma brutal esta diferença, fica a dica para os fanátivos em tecnologia, se for comprar “Cuidado com  a tela”.
     O processador dual core me deixou impressionado, fiz alguns programinhas em android e pude perceber que ele realmente da conta do recado em varios aspectos, outra coisa que me chamou a atenção foi  quantidade de programas(widgets) que vem predefinidos neste dispositivo, chega a ser um transtorno arrastar e retirar aquele monte de ícone que fica espalhado nas diversas áreas de trabalho.
      Mas estava tudo indo muito bem, muito bem, quando pensei, que tal entrar na AndroidMarket e baixar alguns programinhas para tabblet ? Ai que morou o grande problema, praticamente é irrisório a quantidade de apps para o HoneyComb, o mais triste foi verificar que até as aplicações mais baixadas, tais como: Facebook, Google Plus possuem uma interface pobre e pouco adaptada, chega a ser como colocar a roda de um fusca em um caminhão da volks……. Fica Sobrando Espaço demaisss !
      Senão bastasse isso, outra coisa que me preocupou foi perceber que existem muitos anti-vírus pra baixar na Android Market, seria algum sinal negativo ?  Suspeita confirmada, quando resolvi procurar pelas falhas de segurança no Android……….. nuoooooooossssaaaaa !  Tem demaisss heinnnn…
      Ao meu ver, a grande questão é a quantidade e liberdade dadas aos desenvolvedores para esta plataforma, qualquer um que conheça Java e tenha um dispositivo, consegue rapidamente fazer um programinha e rodar “de boa”. Fato que não acontece na “maçã”, afinal, você precisa pagar por uma assinatura de desenvolvedor para poder realizar o teste no seu iphone/ipad ;(.
      Mas parece que a coisa está mudando, a gigante google resolveu criar um serviço chamado “Bouncer” que parece ser uma arma para esse monte de falha de segurança.
         Este serviço parece ser realmente fantástico, logo abaixo, transcrevo alguns trechos do texto escrito pelo Hiroshi Lockheimer, VP of Engineering, Android.
“O ano passado foi fenomenal para o ecossistema Android. O número de dispositivos cresceu 250% ano-a-ano, e o número total de downloads de aplicativos do Android Market superou 11 bilhões. Como a plataforma continua a crescer, estamos focados em trazer-lhe os melhores novos recursos e inovações, incluindo em matéria de segurança.

Adicionando uma nova camada ao Android segurança
Hoje estamos revelando um serviço que nós desenvolvemos, codinome Bouncer, que prevê a digitalização automatizada do Android Market para software potencialmente malicioso sem interromper a experiência do usuário do Android Market ou exigindo que os desenvolvedores de passar por um processo de aprovação de aplicativos.
O serviço realiza um conjunto de análises sobre novas aplicações, aplicações já no Android Market, e as contas do desenvolvedor. Eis como funciona: quando um aplicativo é carregado, o serviço começa imediatamente a analisá-lo  a procura de algum malware, spyware e ou trojans. Ele também procura por comportamentos que indicam um aplicativo pode ser mal-intencionado, e o compara com aplicativos previamente analisados ​​para detectar possíveis bandeiras vermelhas. Nós realmente executamos todas as aplicações em infra-estrutura de nuvem do Google e simular como ele será executado em um dispositivo Android a olhar para o comportamento oculto, malicioso. Analisamos também as contas de desenvolvedores para ajudar a prevenir novos desenvolvedores mal-intencionados.


Android faz com que o malware se torne menos potente 
   Algumas das características de segurança do Android são:

    Sandboxing: A plataforma Android usa uma técnica chamada “área de segurança” para pôr paredes virtuais entre aplicações e outro software no dispositivo. Então, se você baixar um aplicativo malicioso, ele não pode acessar dados sobre outras partes do seu telefone e seu dano potencial é drasticamente limitado.
    
Permissões: Android fornece um sistema de permissão para ajudar você a entender as capacidades dos aplicativos que você instala e gerencia suas próprias preferências. Dessa forma, se você ver um jogo desnecessariamente pede permissão para enviar SMS, por exemplo, você não precisa instalá-lo.
    
Remoção de malware: Android foi concebido para prevenir que malwares modifiquem a plataforma ou se escondendo de você, por isso, pode ser facilmente removido se o seu aparelho é afetado. Android Market também tem a capacidade de remoção de malware remotamente a partir do seu telefone ou tablet, se necessário.Nenhuma abordagem de segurança é infalível, e escrutínio adicional muitas vezes pode levar a melhorias importantes. Nossos sistemas estão ficando cada vez melhor na detecção e eliminação de malwares a cada dia, e continuamos a convidar a comunidade para trabalhar conosco para manter a segurança Android.”

     Então é isso,  para quem quiser ver o post na integra, basta clicar aqui
     
     Volto por aqui quando tiver mais novidades…


Abrcs
Natanael Fonseca

Descobrindo o PrimeFaces escondido no NetBeans

 

Olá pessoal,
    Pra quem já me conhece, sabe o quanto sou fã boy da IDE  Eclipse, desde meu tempo de faculdade sempre curti essa ferramenta e foi nela que durante meus poucos anos em Java, experimentei alguns frameworks pra Web como, por exemplo: WebWork, Tapestri, JSF e Struts. Lembrando que este último foi o que de fato eu realmente usei extensivamente em projetos que trabalhei, afinal, nem toda empresa é obrigada a estar na última moda tecnologica.
    Parece piada mas sempre que eu abria a IDE NetBeans, sentia ela meio, como posso dizer…. “diferente”, mas nem por isso deixei de acreditar que ela era uma das melhores, coisa de costume mesmo.
     Recentemente estava em sala de aula usando o NetBeans e ensinando algumas coisas básicas em JSF e foi quando eu descobri a integração do mesmo com uma implementação JSF chamada PrimeFaces, mas pera ai ! PrimeFaces ? Até então não tinha ouvido falar nessa implementação, só na já consagrada RichFaces, que até aquele instante, foi a que mais ouvi e vi a galera comentando pela internet e botequins de Java. (Sim, Existe Botequim Geek 🙂 ).
     Pesquisando aqui e pesquisando ali, fiquei maravilhado com a quantidade de componentes adicionais que ela implementa, realmente de deixar qualquer um balançado.
        Pra começar, basta dar uma olhada no showcase, que já possui uma lista enorme de temas e componentes. Recomendo uma olhada na integração com o Google Maps e exibição de midias.
        E, é claro, seguindo a onda mobile, não podia deixar de ter uma forma de exibir todos esses componentes nesses pequenos dispositivos, em especial o IPhone
        A ideia deste Post não era a de apresentar nada prático, só de compartilhar essa descoberta mesmo,  espero que vcs tenham gostado.

Site Oficial

http://primefaces.org/

User Guide

http://primefaces.googlecode.com/files/primefaces_users_guide_3_0.pdfhttp://primefaces.googlecode.com/files/primefaces_users_guide_3_0.pdf

Um grande Abrc.
Natanael Fonseca

Calculando fatorial em Android ( Hello World )

Olá pessoal,

   Acho que alguns alunos e amigos mais próximos tinham ouvido e com certeza percebido a minha empolgação com desenvolvimento mobile e, principalmente a plataforma Android, pois bem, diante de tamanha onda de Tablets e SmartPhones que o mercado tem nos proporcionado, bem que tava na hora de mostrar algo mais divertido aqui no blog ;-).
    Aproveitei o tempinho livre e resolvi fazer um “Hello World” em Android, na verdade não é bemmmmm um Hello World clássico, é uma aplicação que calcula o fatorial de um numero inteiro positivo usando recursividade e o exibe em um toast.
     Essa aplicação foi construída usando a plataforma 3.1, conhecida como HoneyComb. Primeiramente usei um LinearLayout para dispor os diversos componentes(ImageView, TextView, EditText e etc.) de forma vertifcal, depois adicionei um evento do tipo “OnClick” que aciona automaticamente o método calcularFatorial dentro da Activity e por ultimo chamo o método showToastMessage que cria um objeto Toast e o exibe por alguns instantes na tela, criando um efeito bem interessante.
Código do Layout


<linearlayout
    android:layout_width=”fill_parent”
    android:layout_height=”fill_parent”
    android:gravity=”center_horizontal”
    android:orientation=”vertical” android:background=”#FFFFFF” >


    <imageview</imageview
        android:id=”@+id/imageView2″
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:layout_gravity=”left”
        android:src=”@drawable/androidleaning” />


    <textview</textview
        android:id=”@+id/textView1″
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:text=”Fatorial”
        android:textSize=”15pt”
        android:textAppearance=”?android:attr/textAppearanceLarge” />


    <textview</textview
        android:id=”@+id/textView2″
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:text=”@string/app.introduction” />


    <textview</textview
        android:id=”@+id/textView3″
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:text=”@string/app.definicao” />


    <imageview</imageview
        android:id=”@+id/imageView1″
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:src=”@drawable/fatorial” />


    <textview</textview
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:layout_gravity=”left”
        android:text=”@string/form.titulo”
        android:textSize=”8pt” />


    <edittext</edittext
        android:id=”@+id/etValor”
        android:layout_width=”match_parent”
        android:layout_height=”wrap_content”
        android:inputType=”number” >


       
   


    <button</button
        android:id=”@+id/btCalcular”
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:text=”@string/button.label” android:onClick=”calcularFatorial” />


Código da Activity


package com.blogspot.thecodingoflife.android;


import java.math.BigInteger;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;


/**
 * 
 * Activity que calcula um determinado fatorial…
 * 
 * @author Natanael Fonseca
 *
 */
public class FirstAppActivity extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.main);
        
    }
    


    public void calcularFatorial(View view){
   
    EditText edText = (EditText) this.findViewById( R.id.etValor );
   
    long n = Integer.parseInt( edText.getText().toString() );
   
    showToastMessage(“O Fatorial deste número é : ” + fatorial( BigInteger.valueOf(  n  ) )  );
   
    }
    
    private BigInteger fatorial(BigInteger n ){
   
    if( n.compareTo( BigInteger.ONE ) <= 0 ){
    return BigInteger.ONE;
    }else{
    return n.multiply( fatorial( n.subtract( BigInteger.ONE )  ));
    }
   
    }
    
    
    //Exibe um ToastMessage por um curto periodo de tempo
    private void showToastMessage(String msg){


        Toast toast = Toast.makeText(this, msg, Toast.LENGTH_LONG );
        toast.show();


    }
    
}

Resultado Final

App Roando no Galaxy Tab 10.1


Download do Projeto

Baixe aqui o projeto ! Para rodar, basta importar no eclipse e, lembrando é claro que você precisará ter o ADT como plugin.

Abrcs.
Natanael Fonseca

Muitos estudos em 2012

Olá pessoal,
   O ano de 2012 começou e vale a pena uma reflexão sobre o mundo Java, afinal, o que se pode esperar nesse ano envolvendo esta plataforma ? Pois bem, com a JVM sendo um padrão em grandes empresas no mundo todo, há de se esperar muita novidade para atender as diversas tendencias de mercado. Um fator interessantissimo que se pôde observar no ano de 2011, foi a popularização de linguagens de programação como Scala e JRuby, e até mesmo Clojure que são construídos em cima da VM,  estas oferecem recursos de programação novos e únicos e que são adequados para diferentes tipos de sistemas. 
   Um exemplo claro dessa corrente é implicitamente observado na rapidez em alguns serviços do  Twitter que são escritos em Scala ou ainda no uso de JRuby feito pelo LinkedIn e, não esquecendo ainda que o famoso site de viagens kayak tem serviços de backend escrito em Clojure. Em 2012, esta próxima geração de linguagens trarão soluções para uma gama enorme de sistemas, tudo sem a necessidade de batalha com outras soluções corporativas sobre como as aplicações escritas nelas serão implantadas. Então,  bons estudos para este Ano Novo !

   http://www.scala-lang.org/
 
   http://jruby.org/

   http://clojure.org/

Abrcs.
Natanael Fonseca

Public Key Cryptography Standard #11 (PKCS#11)

 

Introdução
Ao longo da história da criptografia de chaves públicas, a utilização de padrões sempre foi tida como algo extremamente necessário, porém, a corrida para defini-los, acabou por ter sido responsável pela incrível sopa de letrinhas que existe neste mundo. Em se tratando exclusivamente de certificados do Tipo A3,  o fato é que atualmente existem inúmeros padrões que podemos utilizar quando estivermos pensando na escolha de uma arquitetura para a utilização de certificados digitais que estão armazenados em dispositivos seguros conhecidos como HSM (Hardware Security Module).
Este artigo tem como intuito demonstrar os principais padrões disponíveis no mercado para a comunicação com esses dispositivos, dando enfase no que considero o principal e mais comum deles, PKCS#11. Pretende-se mostrar ainda, como a tecnologia Java fornece de uma maneira elegante uma interface que abstrai toda a comunicação com esses dispositivos através da JCA/JCE e o conceito de providers.
Afinal, o que é um HSM ?
Basicamente esses hardwares são um tipo de criptoprocessador que tem como objetivo o gerenciamento digital de chaves, suas funções incluem dentre outras: encriptação, decriptação, geração de chaves e hashing. Aqui no brasil os HSMs mais populares são os do tipo Token ou SmartCards, bastante utilizados no conceito de E-CPF.
RSA Security
É uma divisão da EMC Corporation, que foi  fundada pelos mesmos criadores do algoritimo RSA: Ron Rivest, Adi Shamir e Len Adleman, a sua norma PKCS, configura uma das mais importantes contribuições para a regulamentação da Public key Infraestructure no mundo inteiro.
Refere-se a um grupo de padrões publicados pela RSA Security, cuja intenção principal é a criação de normas que regem vários aspectos e procedimentos dentro da infraestrutura de chaves. Até a data da criação deste artigo eram ao todo doze padrões.
PKCS#11 ( Cryptographic Token Interface ou Cryptoky  )
Esta relacionado a uma API que define uma interface padrão para “Tokens Criptográficos”, ou seja, cada fabricante de HSM que seguir este padrão, está concordando em fornecer uma API na qual várias linguagens de programação e até mesmo os Sistemas Operacionais podem se comunicar, assim sendo, pode-se concluir que esta API fornece a abstração necessaria para a comunicação comum entre diversos tipos de tokens de diferentes marcas.
Java e PKCS#11
A plataforma Java define um cojunto de APIs para realizar operações criptográficas, estas interfaces estão inseridas dentro da JCA e também da JCE. Pelo fato da JCA/JCE terem sido criadas com o conceito de “provider based”, o acesso aos  tokens criptográficos pode ser feito por meio de um provedor da própria Sun que é encontrado na JDK, chamado de “Sun PKCS#11 provider”.
             E para fazer uso deste provider, basta que sigamos os seguintes passos:

    1. Criação de um arquivo de configuração, no minímo, informando o nome do Token e a DLL, caso windows,  ou arquivo.so, caso linux, para a comunicação do dispositivo.
    2. Adicionar o Provider SunPKCS#11 ao serviço cripgrafico.
    3. O ultimo passo é apenas programar o acesso ao token, do mesmo modo como se acessa uma keystore qualquer…

Comunicando com Aladdin-eToken          

         Para este exemplo prático, vou utilizar o token criptográfico “Alladin-eToken”, da  empresa Safenet , que facilmente encontrado aqui no brasil, pelas diferentes Acs.          

Passo 1:

          Basta abrir o notepad ou um editor de texto qualquer e, criar um arquivo como o da imagem abaixo:

Config.txt




Passo 2

      As linhas de código para adicionar o provider da Sun PKCS11, são as da imagem abaixo:    

Adicionando o provider ao servico criptográfico.
Passo 3
   Agora vem o último passo, que é utilizar de fato os serviços criptográficos do token, o código abaixo obtem uma instancia da KeyStore, definindo o tipo para PKCS11(Linha 38), depois inicia a mesma, passando o PIN informado pelo usuário(Linha 42) e, por último recupera uma Enumeration contendo todos os aliases que existem nesse “repositório de chaves”(Linha 44), feito isso você já consegue obter o certificado e a chave privada para utilizar na assinatura digital de documentos eletrônicos.

Código para obter o certificado e a chave privada do Token.



Conclusão


           Dado o exposto, conclui-se que o acesso aos tokens criptograficos utilizando o provider da Sun, denominado de SunPKCS#11, é de fácil utilização ! Contudo, há de se observar que haverá a necessidade de solicitar do usuário da aplicação o arquivo de comunicação com o Token,  .DLL no windows ou .SO no Linux.
            Em se tratando de amigabilidade do sistema que será construido e a diversidades de possiveis tokens que a sua aplicação irá suportar, faz-se necessário que o usuário seja treinado para saber,quando for solicitado, informar a localização deste arquivo de comunicação.