sexta-feira, 14 de dezembro de 2012

Como fazer vários registos num site com o mesmo e-mail

O requisito principal é ter uma conta gmail. Vamos supor que temos o seguinte e-mail, aefdev@gmail.com, e queremos fazer vários registos num site.
Para isso basta adicionar +[qualquer coisa] ao nome.
Ex:

  • aefdev+1@gmail.com
  • aefdev+blabla@gmail.com
  • aefdev+ehehe@gmail.com
Se enviar uma mensagem para um dos e-mails acima, todos eles vão para à caixa de aefdev@gmail.com.



Assim é possível passar na verificação do e-mail.

sábado, 8 de setembro de 2012

Inverter número


Este é uma algoritmo simples que permite inverter um número inteiro.

package com.blogspot.aefdev;

public class InverteNumero {

 public static int inverteNumero(int numero) {
  int nInvertido = 0;
  int tmp = 0;

  while (numero > 0) {
   tmp = numero % 10;
   numero /= 10;
   nInvertido = nInvertido * 10 + tmp;
  }
  return nInvertido;
 }

 public static void main(String[] args) {
  System.out.println(inverteNumero(123457));
  System.out.println(inverteNumero(4356652));
 }

}
Resultado:
754321
2566534

quinta-feira, 6 de setembro de 2012

Visualizar password em formulário de login

Muitas vezes temos o habito, quando o browser pergunta se queremos que ele guarde a nossa password , responder que sim. Isso pode levar com que nos esqueçamos das nossas credenciais.
Umas das varias formas de recuperar é utilizar das ferramentas que os browsers nos disponibilizam para o auxilio ao desenvolvimento.
Neste caso vou utilizar a ferramenta "Developer Tools" no Google Chrome.

Um possível caso...
Para iniciar a ferramenta "Developer Tools" podemos utilizar o atalho Shift+Ctrl+I ou no menu Tools -> Developer Tools.
Agora vamos utilizar a funcionalidade "Inspect it" (). Ao passarmos o rato por cima da caixa de texto com  a password, vai-nos sendo mostrado o código HTML correspondente.

Agora só temos de alterar o tipo do input, de <input type="password" class... para <input type="text" class...

sexta-feira, 24 de agosto de 2012

Agência Espacial Europeia Vulnerável a SQL Injection

Foram colocadas ontem (23-08-2012) no pastbin informações relativas à exploração de uma falha de segurança (SQL Injection) no site da Agência Espacial Europeia por um grupo denominado NullCrew.

                                 _   _       _ _ _____                  
                                | \ | |     | | /  __ \                  
                                |  \| |_   _| | | /  \/_ __ _____      __
                                | . ` | | | | | | |   | '__/ _ \ \ /\ / /
                                | |\  | |_| | | | \__/\ | |  __/\ V  V /
                                \_| \_/\__,_|_|_|\____/_|  \___| \_/\_/  
                                  @OfficialNull
                                #######################################

Today is the rebirth of NullCrew.
I am here to finish what manst0rm, Zer0Pwn, IonCuber, ignit3 and airyz started.
You all thought it was the end, but you were wrong.

Let's start this show with the European Space Agency's Databases.

Target ==> http://giove.esa.int/
Vulnerability (MySQL Injection) ==> http://giove.esa.int/news.php?op=viewtopic&topic=6

Stay tuned for much more @OfficialNull ;)

    #######################################

Databases: 

information_schema
data_db
mysql
test
ws_db

Tables for: data_db

accumulated_coll_status  
core_products  
daily_qua_stats  
data_file  
data_type  
dsf_gallery  
dsf_traps  
fds_files  
gal_daily_qua_stats  
gal_qua_stats_giove_A  
gal_qua_stats_giove_B  
gal_weekly_deg_interv_qua_stats  
gal_weekly_qua_stats  
gnat_delay  
gnat_files  
gnat_histogram  
gnat_sessions  
gnat_stat_sess  
gnat_weekly_stats  
nagu_files  
origin  
osrt_files  
process  
scenario  
scenario_type  
session_type  
station_outages  
stations  
web_service  
web_settings  
weekly_deg_interv_qua_stats  
weekly_qua_stats

Tables for: ws_db

counter  
flags  
main  
menu  
pages  
queue  
referer  
stories  
topics
user_access
users_new
users_online

(No data in the Users tables).

MySQL Database data:

Host   User    Password
________________________________________________
127.0.0.1  root  
172.17.0.37  dsf_user  *E7D4552C7B4118EF6F5153625612A2CD78687CF0
gpcarc  dsf_user    7273d07d3af18ead
gpcarc  ws_user     49f4fb767378fae2
gpcdmz  dsf_user    dsf_password
gpcdmz  root  
localhost  root  
localhost  ws_user  *C14D1003FA56016D3557983B825094982EA083EB

sábado, 14 de julho de 2012

Ordenar Array bidimensional

Como já tinha sido referido aqui podemos ordenar um array de uma dimensão, recorrendo à classe java.util.Arrays. Para ordenar um array bidimensional, temos de implementar a interface  java.util.Comparator.
Vamos supor que temos um array bidimensional em que a primeira coluna de cada linha é o nome de uma pessoa, a segunda a idade e a terceira uma descrição.
Com o seguinte código Java, vamos ordenar o array por idades.

package com.blogspot.aefdev;
 
import java.util.Arrays;
import java.util.Comparator;
 
public class Exemplo {
    
    public static void main(String[] args) {
        String arr[][] = {
                    { "João", "25", "desc x" },
                    { "Maria", "20", "desc y" },
                    { "Zé", "30", "desc z" }
                };

        Arrays.sort(arr, new Comparator() {
            @Override
            public int compare(String[] o1, String[] o2) {
                final String idade1 = o1[1];
                final String idade2 = o2[1];
                return idade1.compareTo(idade2);
            }
        });
        // Imprimir Array
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i][0] + ", " + arr[i][1] + ", " + arr[i][2]);
        }
    }
}

Resultado:
Maria, 20, desc y
João, 25, desc x
Zé, 30, desc z

terça-feira, 26 de junho de 2012

Converter Array para java.util.List

Object[] arr = new Object[]{"x","y","z"};
java.util.List list = Arrays.asList(arr);

quarta-feira, 20 de junho de 2012

Eclipse instalação e actualização de plug-ins

Eclipse Update Manager

O Eclipse dispõem de um Update Manager que permite instalar ou actualizar componentes do software.
Componentes de software instalados são chamados de features que são compostas por plug-ins.
Para actualizar a instalação do Eclipse, seleccionar Help > Check for Updates. O sistema irá procurar por actualizações dos componentes já instalados.

Para instalar uma  nova funcionalidade, seleccionar Help > Install New Software.



Seleccionar no campo Work with o URL de que pretende instalar o novo software.
Para adicionar um novo update site, clicar em Add e introduzir o novo URL, assim como o nome para o novo site.
Por vezes é necessário desmarcar a opção Group items by category, porque nem todos os plug-ins estão categorizados.

Instalação manual de plug-ins

Se quiser instalar um plug-in que não está disponível em nenhum update site, pode utilizar a pasta dropins, que se encontrar na pasta de instalação do Eclipse.
Para adicionar um plug-in à instalação do Eclipse, basta colocar o ficheiro JAR do plug-in, na pasta dropins e reiniciar o Eclipse. O Eclipse deve detectar o novo ficheiro e instala-lo.

Eclipse Marketplace

Também é possível instalar novos plug-ins, através do Eclipse Marketplace. A vantagem deste método, é que é possível procurar por componentes, descobrir componentes populares e ver descrições e pontuações.
Para Abrir, seleccionar Help > Eclipse Marketplace.


Fonte: vogella

Ordenar array rapidamente

Existem vários algoritmos para ordenação de arrays, mas se precisarmos de uma forma rápida, podemos  recorrer à classe java.util.Arrays. Éste método é baseado no algoritmo Merge-sort. 
package com.blogspot.aefdev ;

import java.util.Arrays;

public class Teste {

    public static void main(String[] args) {
        String arr[] = {"A", "a", "1", "Zz"};
  
        Arrays.sort(arr, String.CASE_INSENSITIVE_ORDER);
        for(String str:arr) {
            System.out.println(str);
        }
    }
}
1
A
a
Zz

terça-feira, 19 de junho de 2012

Singleton Pattern

A singleton Pattern é um design pattern que restringe a instanciação de uma classe a um objecto. Isto é útil quando pretendemos que não sejam utilizada mais que uma instância do da mesma classe.

Todas as solução são Thread-Safe.

Inicialização Lazy

public class Singleton {
    private static Singleton instance = null;

    private Singleton() {
        //TODO Completar construtor
    }

    public synchronized static Singleton getInstance() {
        if(instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}


Inicialização Eager

Se o programa precisar sempre de uma instância ou se o custo de criação de uma instância não for muito elevado em termos tempo/recursos, pode utilizar a inicialização eager.

public class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {
        //TODO Completar construtor
    }

    public static Singleton getInstance() {
        return instance;
    }
}

Inicialização Static block

Esta solução permite algum pré-processamento, por exemplo, para verificação de erros.
public class Singleton {
    private static final Singleton instance;

    static {
        try {
            instance = new Singleton();
        } catch (IOException e) {
            throw new RuntimeException("Erro ão inicializar", e);
        }
    }

    private Singleton() {
        //TODO Completar construtor
    }

    public static Singleton getInstance() {
        return instance;
    }
}

"Double-checked locking"

Esta solução permite reduzir o uso do synchronized no método getInstance().
Utilizando "double-checked locking", verificamos se a instância já existe, se não, depois sincronizamos.

public class Singleton {
    private volatile static Singleton instance = null;

    private Singleton() {
        //TODO Completar construtor
    }

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

Emun

Desde o Java 5.0, a forma mais simples de criar um Singleton é através do tipo Enum. Com esta abordagem tiramos partido da garantia do Java de que qualquer valor de um enum só é inicializado uma vez.


public Enum Singleton {
    INSTANCE;
    public void execute(String arg) {
        //TODO completar
    }
}
Exemplo:

Singleton.INSTANCE.execute("qualquer coisa");

Como criar um plug-in Eclipse a partir de um ficheiro JAR

Infelizmente nem todo código Java está estruturado como Eclipse plugins e por vezes é necessário utilizar código Java disponível em arquivos JAR (Padrão Java). Felizmente a integração dessas livrarias no Eclipse é razoavelmente simples. Este processo é normalmente designado de "bundling".
Para exemplificar vou utilizar o Driver para Java do MongoDB.

Primeiro efectuamos o download do ficheiro JAR, que no meu caso fui "mongo-2.8.0.jar".

Cria um novo projecto: File > New > Project... > Plug-in Development > Plug-in from existing JAR archives. Na pagina seguinte identificar os JARs que quer no plugin. Clicar em Add External... e seleccionar o ficheiro mongo-2.8.0.jar. Clicar Next para visualizar a seguinte pagina.



Preencher os campos Project name e plug-in Name. Quando o finalizar o Wizard, deve ter o mongodb java drive plug-in que será semelhante à seguinte figura.


Ao visualizar o MANIFEST.MF podemos ver que o cabeçalho Export-Package, lista os packages disponíveis para os outros plug-ins.

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Mongodb Driver
Bundle-SymbolicName: com.mongodb
Bundle-Version: 1.0.0
Bundle-ClassPath: .
Bundle-Vendor: mongodb.com
Export-Package: com.mongodb,
 com.mongodb.gridfs,
 com.mongodb.io,
 com.mongodb.util,
 org.bson,
 org.bson.io,
 org.bson.types,
 org.bson.util,
 org.bson.util.annotations
Bundle-RequiredExecutionEnvironment: JavaSE-1.6