About hussamaismail

Nov.20

Implementação de um Indexador de Buscas – Tópicos Especiais em Engenharia de Computação

Conceitos Básicos:

1 ) Recuperação de Dados:  Tarefas precisas, não visa incorporar o significado do que está sendo buscado e as respostas devem ser corretas.

2 ) Recuperação de Informação: Tarefas imprecisas, tentam modelar o significado do que está sendo buscado e o objetivo é trazer as melhores respostas

EX:

1) Documentos que contém a palavra ‘FUTEBOL’;
2) Procura por bons documentos que falam sobre a definição de ‘FUTEBOL’.

 

 

Mineração de Dados

Nov.20

Conceitos Iniciais de Spring Integration!

Spring Integration : É um framework desenvolvido pela springsource que implementa diversos mecanismos para se trabalhar com mensagens e integração a outros sistemas.

— Conceitos —

Mensagem: É um container de dados formado por um payload e um header. O header contem as informações de remetentes da mensagem, destinatários e etc, já o payload é o conteúdo, ou seja as informações que realmente interessam. No payload podemos colocar qualquer coisa que possa ser serializable, um exemplo prático um objeto POJO

 

Em Construção …

 

Spring Integration

Nov.20

Criando operações de CRUD no Windows Phone 7.1! :D

Pessoal, tudo bem? Estes dias estou estudando um pouco sobre Windows Phone e gostaria de descrever o que aprendi
para que possa servir também de ajuda para outras pessoas

Windows Phone:  Pessoal o windows phone 7.1 possui um banco de dados SQL Server CE (Compact Edition) que nós utilizaremos para salvar os nossos dados, e utilizaremos também a biblioteca LINQ TO SQL para se comunicar  por meio da aplicação

– Em Construção!

Windows Phone,Mobile

Aug.01

Certificação Digital – Conceitos

Criptografia: É o ato de esconder uma informação possuindo um método de obter essa informação novamente.
O exemplo mais antigo de criptografia foi o criado por Cesar onde suas mensagens tinham como algoritmo de criptografia avançar 3 letras a frente da letra real, ex: AYQY -> CASA.

Existem dois tipos de criptografia:

Simétrica: Onde a chave que é utilizada para criptografar um arquivo/mensagem é a mesma para descriptografar
Algoritmos: DES, DESI, BLUEFISH .

Assimétrica: Trabalha com um par de chaves (Chave Pública e Chave Primária).
Algoritmos: RSA, DSA.

Terceiro de Confiança (TrustStore / CA CERT): É uma terceira parte que garante que a chave da pessoa que assinou o documento/arquivo é valido. Ex: CertSign, Itau.

Certificado Digital:  É um documento eletrônico que contem as informações da chave pública e outras informações da pessoa/entidade assinado pelo terceiro de confiança.

PKCS: São os padrões criptográficos de chave pública. Existem padrões diferentes para token, arquivo etc

PKI: É a infra-estrutura de chaves públicas onde é necessário uma AC_RAIZ que é auto assinada por lei, e as AC’s que são assinadas pela AC_RAIZ

(*) – AC ~ Autoridade Certificadora.

——-

Hash: Algoritmo de Resumo ou algoritmo criptográfico de uma via.
Alguns tipos: MD5, SHA-1, SHA-128

——–

Exemplos:

Se eu assino um documento com uma chave publica de uma pessoa, só ela que poderá acessar a informação por meio da sua chave privada.
 Se eu assino um documento com a minha chave privada, esse documento está sujeito a não repúdio ou seja não se pode negar que aquela operação foi feita.

Certificação Digital

Jul.20

Como comparar uma data no Oracle?

Pessoal para pegar um campo date e comparar com uma data no oracle é bem simples, podemos utilizar a função trunc.

Exemplo:


select * from nome_da_tabela where trunc(nome_campo_data) = 'dd/MM/yyyy';

😀

Oracle

Jul.20

Workshop Javascript – FUCAPI / Alexandre Rocha

Anotações sobre o Workshop de Javascript proposto pelo nosso colega Alexandre Rocha!

— RIA —

Interface Rica: Interface diferente das propostas até os anos 90 (cliente/servidor) onde não possuia interface interativa com usuário, eram apenas formulario para envio de dados e que aguardavam o processamento do servidor. Com a inteface rica geralmente possuimos requisições assincronas que permitem uma maior utilização do usuário sem depender de uma resposta imediata do servidor.

Tecnologias:  DHTML (javascript + DOM + CSS) , Ajax, Json (Javascript Object Notation).

Funcionalidades: Drag and Drop, auto-complete, efeitos visuais e etc.

Ganhos: Otimização do uso da rede, do servidor e melhor resposta para os eventos da UI (Interface de Usuário)

Restrições: Processamento por parte do Cliente, perda de integridade, não são indexados por sites de busca e alta complexidade do desenvolvimento e nos testes.

— Javascript —

CrossBrowser: São os comandos que funcionam em todos/maioria dos browsers.

Tipagem: Fraca, dinâmica e implícita. (Uma variavel que guarda um valor inteiro, pode facilmente ser alterada por um outro tipo como por exemplo String)

Case Sensitive: ou seja uma variavel declarada em minuscula é diferente de uma variavel declarada em maiuscula:


var a = "teste";

var A = "teste";

**: Uma das coisas mais importantes para se trabalhar com interface rica é requisições assincronas.

Tipos Primitivos: String, Number, Boolean, Undefined (não declarado), null.

Códigos

Trabalhar com arrays é bem simples com javascript podemos trabalhar da seguinte maneira:


var meuArray = new Array();

//Para adicionarmos um elemento podemos utilizar:

meuArray.push("1");

//ou Então:

meuArray[0] = "1";

Podemos declarar uma lista pre-definida também:


var brinquedos = ["carrinho", "video-game", "bola"];

//inclusive caso queiramos alterar o separador dessa lista basta utilizarmos o comando "join"

//sendo assim será impresso da seguinte maneira: "carrinho~vide-game~bola";

document.write(brinquedos.join("~"));

Arrays Multidirecionais (Matriz) também podem ser implementados e um detalhe que um indice nao precisa ser um valor numérico:


var arr = new Array();

arr['comida'] = new Array();

arr['bebida'] = new Array();

Formularios

Para pegar todos os formularios existentes na pagina com javascript é bem simples:


var formularios = document.forms;

De modo que é retornado uma lista com todos os formularios presentes na pagina

— Orientação a Objetos —

Trabalhar com orientação a objetos em javascript é bem interessante, podemos criar classes estáticas e classes que podem ser instanciadas (utilizam funções anônimas).

Classe Estática:


var Pessoa = {

this.nome : null,

this.idade : null,

init : function(nome, idade){

this.nome = nome;

this.idade = idade;
}

}

Classes que podem ser instanciadas:


var Pessoa = function(nome,idade){

this.nome = nome,

this.idade = idade,

}

//Com isso nos podemos instanciar um novo objeto do tipo pessoa:

var p1 = new Pessoa("Hussama",21);

Encapsulamento:

Podemos melhorar com as boas práticas de OO utilizando encapsulamento. Só serão enxergados fora da classe os atributos e métodos que possuem o this. como prefixo, os demais são considerados private e por conversão devem possuir o prefixo _.

Recriando a classe pessoa ficaria assim:


var Pessoa = function(nom){

nome = nom,

this.setNome : function(n1){

nome = n1;

},

this.getNome(){

return nome;
}

};

JSON —

Para retornar um objeto a partir de uma String Json é só utilizar o eval:


var objeto = eval("{ nome : 'Hussama', idade : '18' }");

JavaScript

Apr.24

Apr.10

Apr.09

Dependências do Maven para um projeto utilizando Spring Batch!

Para criar um projeto com Spring Batch + Maven precisamos definir algumas dependências, são elas:

Adicionar ao POM.xml dentro da raiz <project>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.batch</groupId>
<artifactId>spring-batch-core</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>

Abração!

Spring Batch

Apr.09

Como ler um arquivo CSV com Spring Batch?

Estava fazendo uns testes utilizando um arquivo CSV, como fazer sua leitura para posteriormente gravar os dados em uma base de dados.

Bom, é bem simples de se fazer e utilizei como referência a propria documentação do Spring Batch e o livro Spring Batch in Action. 

———

Neste exemplo utilizarei um arquivo csv chamado: pessoas.csv que conterá objetos pessoa possuindo id, nome e idade;

 Arquivo CSV

id,nome,idade

1,Monica,19

2,Joao,30

3,Juliana,20

4,Sandra,23

5,Jose,10

Para efetuarmos a leitura de um arquivo CSV (Comma Separated Values) podemos utilizar uma implementação bem tranquila do Spring que abstrai e facilita o nosso trabalho, vamos utilizar a classe: FlatFileItemReader.

No entanto o FlatFileItemReader necessita de dois parâmetros para o funcionamento, que é uma classe de Domínio (Bean) referente ao arquivo (É aquela classe que possui os atributos, getters, setters e etc)  e alguem que implemente a interface LineMapper.

Com relação ao LineMapper o Spring já nos fornece uma implementação, a classe DefaultLineMapper.

A Classe DefaultLineMapper precisa ter duas propriedades para o seu funcionamento, que é uma classe que implemente LineTokenizer (responsável por pegar os elementos e separar os seus atributos) e uma implementação de FieldSetMapper que será  a classe responsável por fazer o “MOR” (mapeamento objeto relacional) do arquivo na classe de domínio Java.

Com relação ao LineTokenizer podemos usar uma implementação já existente do Spring que é a classe DelimitedLineTokenizer onde só precisamos especificar a propriedade “names” que corresponde aos atributos do arquivo csv.  Já quando falamos do FieldSetMapper precisamos cria-lo e customiza-lo para a nossa aplicação como no exemplo da classe PessoaFieldSetMapper.java abaixo:


import org.springframework.batch.item.file.mapping.FieldSetMapper;
import org.springframework.batch.item.file.transform.FieldSet;

import br.eti.hussamaismail.batch.poc.csv.domain.Pessoa;

public class PessoaFieldSetMapper implements FieldSetMapper<Pessoa> {

public Pessoa mapFieldSet(FieldSet arg) {

Pessoa p = new Pessoa();

p.setId(arg.readInt("id"));
p.setNome(arg.readString("nome"));
p.setIdade(arg.readInt("idade"));

return p;
}

}

 

Pronto, feito isso já conseguiriamos ler um arquivo CSV no entanto um STEP é composto de um Reader e um Writer, como só temos um reader precisamos implementar um writer para nosso projeto.

Para implementar um writer é bem simples basta criar uma classe que implemente a interface ItemWriter seguindo o exemplo:


public class Writer implements ItemWriter<Pessoa> {

public void write(List<? extends Pessoa> arg0) throws Exception {
System.out.println(arg0.toString());
}

}

Arquivo do Job

<bean id=”reader” class=”org.springframework.batch.item.file.FlatFileItemReader”>
   <property name=”resource”>
     <bean class=”org.springframework.core.io.FileSystemResource”>
         <constructor-arg value=”src/main/resources/csvs/pessoas.csv“/>
     </bean>
   </property>
   <property name=”lineMapper” ref=”defaultLineMapper”/>
   <property name=”linesToSkip” value=”1″/>
</bean>

<bean id=”defaultLineMapper” class=”org.springframework.batch.item.file.mapping.DefaultLineMapper”>
   <property name=”lineTokenizer”>
      <bean class=”org.springframework.batch.item.file.transform.DelimitedLineTokenizer”>
        <property name=”names” value=”id,nome,idade”/>
      </bean>
   </property>
   <property name=”fieldSetMapper”>
     <bean class=”br.eti.hussamaismail.batch.poc.csv.mapper.PessoaFieldSetMapper”/>
   </property>
</bean>

<bean id=”writer” class=”br.eti.hussamaismail.batch.poc.csv.other.Writer”></bean>

<batch:job id=”readCsvJob” job-repository=”jobRepository”>
   <batch:step id=”step1″>
      <batch:tasklet>
         <batch:chunk reader=”reader” writer=”writer” commit-interval=”1″></batch:chunk>
      </batch:tasklet>
   </batch:step>
</batch:job>

PS: atributo commit-interval refere-se a quantidade de itens que serão processados antes que a transação seja comitada.

Bom, é isso pessoal com isso temos um exemplo de como fazer a leitura de um arquivo CSV de maneira bem simples

Abração.

Spring Batch