Programação
Avatar
Trabalhando com datas no ASP
Seg, 06 de Outubro de 2008 18:15
Por: Renato Tarantelli

Trabalhar com datas é sempre um problema independente da linguagem, pois existem vários formatos de datas dependendo da linguagem, banco, sistema, etc...

Com isso é sempre bom nos atentarmos as sintaxes que a linguagem muitas vezes nos mostra.

O exemplo que irei mostrar trata-se de conversão de string para data no ASP:

<%
data = "January 13, 1970"
Response.Write (CDATE(data) & "<br />")

data = "13/01/2008"
Response.Write (CDATE(data) & "<br />")

data = "jan/13/2008"
Response.Write (CDATE(data) & "<br />")

Response.Write(day(data) & "<br />")

Response.Write(month(data) & "<br />")

Response.Write(year(data) & "<br />")
%>

Como podem notar as datas foram escritas de maneiras diferentes e podem ser escritas de outras maneiras/padrões que a função cDate() fará a conversão.

Porém a conversão é feita no padrão americano sendo mês/dia/ano ou mm/dd/yyyy.

 
Avatar
Criptografia com Java e MD5
Qui, 02 de Outubro de 2008 18:08
Por: Fabiano Madeira

Você pode usar a criptografia para diversas finalidades, um exemplo simples de uso é:
Não gravar campos de senha de usuários sem criptografia,
pois assim qualquer um que tenha acesso ao banco de dados poderá consultar as senhas dos usuários.

O MD5 é um algoritmo de criptografia que gera um hash code a partir de uma string dada.
Vamos ao exemplo usando Java

// Vamos utilizar BigInteger para armazenar o hash
import
java.math.BigInteger;
// Classe que possui os métodos para criptografarmos   
import java.security.MessageDigest;   
// Classe responsável pela exception
import java.security.NoSuchAlgorithmException;


public class Cripto{

//Função que vai criar e retornar o hash

public static String criptografar(String senha){

// Cria uma variável de referencia a um objeto MessageDigest
MessageDigest md = null;

try {   

//Instancia usando o algoritmo MD5
md = MessageDigest.getInstance("MD5");   
} catch (NoSuchAlgorithmException e) {   
println(e);
}

//Cria o hash
BigInteger hash =
new BigInteger(1, md.digest(senha.getBytes()));   

return
hash.toString(16);
}

//Método de teste
public static void main(String[] args) {

//Imprime a palavra Madeiraaaaaaaa criptografada
println("Cripto: " + criptografar("Madeiraaaaaaaa");
}
}

É isso aí, bom divertimento!

 
Avatar
Garbage collector - Coletor de lixo
Qua, 01 de Outubro de 2008 12:03
Por: Marcello Piola Holtz

O garbage collector, ou coletor de lixo, muitas vezes é ignorado pelos programadores e analistas, mas é um ponto importante a ser considerado.

 

O princípio básico de como um garbage collector funciona é:

  1. Determinar que objetos não mais serão utilizados no futuro.
  2. Liberar os recursos utilizados por esses objetos

Em linguagens mais antigas, esses recursos deveriam ser liberados manualmente, ficando a cargo do programador o controle de objetos não utilizados.
Com o garbage collector, encontrado em linguagens atuais como, por exemplo, JAVA, C# e a grande maioria das linguagens script, não temos mais que nos preocupar com a liberação de recursos enquanto desenvolvemos ( com exceção para celulares, ou aparelhos com hardware limitado , porém, será que a liberação manual não nos trás alguns benefícios?

A resposta é sim. Deixar o garbage collector trabalhar por nós significa perder processamento para verificar quais objetos não serão mais utilizados no futuro, o que não é uma tarefa tão simples se pensarmos em lógica.

Quando liberamos recursos no sistema manualmente, esse processo deixa de ser longo, logo, o processamento utilizado pelo garbage collector é menor e sua aplicação vai rodar mais rápido.

Em compensação, o programador tem um trabalho maior e a chance de bugs acontecerem também aumenta.

  • Bugs causados por ponteiros
  • Doubble free - Bug causado pela tentativa de liberar memória quando essa já está livre.
  • Memory leaks - Quando a tentativa de liberar memória falha, causando sua exaustão.
 
Avatar
Recursividade no SQL Server 2005
Sex, 26 de Setembro de 2008 22:09
Por: Renato Tarantelli

Aqueles que tem problemas em relacionar dados em um banco de dados onde há uma amarração por meio de árvore, segue uma boa dica de como utilizar querys recursivas no SQL Server.

Antes de mais nada vamos preparar a tabela que utilizaremos em nosso exemplo:

 CREATE TABLE Hierarquia (
    IdHierarquia INT PRIMARY KEY,
    IdHierarquiaPai INT
)

INSERT INTO Hierarquia VALUES (1,NULL);
INSERT INTO Hierarquia VALUES (2,4);
INSERT INTO Hierarquia VALUES (3,1);
INSERT INTO Hierarquia VALUES (4,1);
INSERT INTO Hierarquia VALUES (5,2);
INSERT INTO Hierarquia VALUES (6,4);
INSERT INTO Hierarquia VALUES (7,3);
INSERT INTO Hierarquia VALUES (8,1);
INSERT INTO Hierarquia VALUES (9,2);
INSERT INTO Hierarquia VALUES (10,1);
INSERT INTO Hierarquia VALUES (11,4);
INSERT INTO Hierarquia VALUES (12,2);
INSERT INTO Hierarquia VALUES (13,3);
INSERT INTO Hierarquia VALUES (14,1);
INSERT INTO Hierarquia VALUES (15,4);
INSERT INTO Hierarquia VALUES (16,3);
INSERT INTO Hierarquia VALUES (17,2);
INSERT INTO Hierarquia VALUES (18,2);
INSERT INTO Hierarquia VALUES (19,1);
INSERT INTO Hierarquia VALUES (20,1);
Criada a tabela e inserida seu elementos vamos a nossa query de recursividade:
WITH Filhos(IdHierarquia, IdHierarquiaPai, nivel, coluna)
AS
(
    -- Membro Ancora
    SELECT
        IdHierarquia,
        IdHierarquiaPai,
        0,
        CAST(IdHierarquia AS BINARY(900))
    FROM Hierarquia

    UNION ALL
   
    -- Membros Recursivos
    SELECT
       H.IdHierarquia,
        H.IdHierarquiaPai,
        F.nivel + 1,
        CAST(coluna + CAST(H.IdHierarquia AS BINARY(10)) AS BINARY(900))
    FROM Hierarquia H
        INNER JOIN Filhos F ON H.IdHierarquiaPai = F.IdHierarquia
)
-- Query com Resultado
SELECT
    IdHierarquiaPai,
    IdHierarquia,
    REPLICATE('|         ' , nivel)
        + (CAST(IdHierarquia AS VARCHAR(20))) AS [Arvore de Hierarquia]
FROM Filhos
ORDER BY coluna

Vamos entender oque foi feito.

1º  A utlização do WITH vem de um dos novos recursos atribuídos ao SQL Server 2005, onde é utilizado para criação de views temporárias,  válida somente dentro do seu batch atual. Esse recurso é denomindado de Common Table Expressions(CTE).

Sintaxe: 

WITH [name] AS (

[instrução SELECT]

)

 

2º A utilização de UNION ALL separando as querys a serem utilizadas, sendo que a primeira é a própria view criada a partir do primeiro elemento de comparação, no nosso caso:

   --  Membro Ancora
    SELECT
        IdHierarquia,
        IdHierarquiaPai,
        0,
        CAST(IdHierarquia AS BINARY(900))
    FROM Hierarquia

 

O primeiro SELECT é denominado de membro âncora, definindo o ponto de entrada da hirarquia.

O segundo SELECT é denominado de membros recursivos onde é incluído o CTE criado em JOIN com a tabela a ser buscado os elementos:

    --  Membros Recursivos
    SELECT
       H.IdHierarquia,
        H.IdHierarquiaPai,
        F.nivel + 1,
        CAST(coluna + CAST(H.IdHierarquia AS BINARY(10)) AS BINARY(900))
    FROM Hierarquia H
        INNER JOIN Filhos F ON H.IdHierarquiaPai = F.IdHierarquia  

Acho que valeu a dica.

Bom Divertimento!


referências:

Linha de Código

MSDN

 
Avatar
Ordenar DataTable usando um DataView
Qui, 25 de Setembro de 2008 15:04
Por: Fabiano Madeira

Segue um exemplo de ordenação de DataTable utilizando um DataView com C#.

// Imagine o Datatable abaixo já carregado com os dados

DataTable dados;

// Criaremos um DataView usando a DefaultView do
// DataTable (lembrando que o DataTable já deve estar
// carregado com os dados neste momento).

DataView dvOrdenado = dados.DefaultView;

// Usamos o método Sort do DataView passando como
// argumento o nome das colunas na sequência que
// deseja a ordenaçãodvOrdenado.Sort = "Coluna5, Coluna2";

// Um foreach para percorrer o DataView já ordenado

String coluna1;
String coluna2;

foreach (DataRow drDados in dvOrdenado.Table.Rows){
//Dentro do foreach pode fazer o que quiser com os dados
coluna1 = drDados["Coluna1"].ToString(); coluna2 = drDados["Coluna2"].ToString();
}


Bom divertimento.
 


Página 5 de 6

Login

Crie uma conta ou use sua conta do Gmail para logar no site.

Google Friend Connect

Contato

Quer entrar em contato conosco? deixe seu recado ou então envie um email para contato[a]worldofbit.com





Alguns Direitos Reservados

Creative Commons License

Pesquisar

Participe

RSS Mantenha-se informado sobre as nossas novidades com nosso newsletter diário
 


Agregadores






Divulgue-nos!

worldofbit.com

Recomendo