Não é de hoje que o Google vêm buscando novas opções de expansão do seu mercado, dentre os serviços já oferecidos pelo Google temos os consagrados Gmail, Google Docs e Picasa. Dentre os fracassos temos o Google Wave (uma rede social pouco sociável) e o Google Buzz (cópia bem fulera do Twitter)  dentre outros serviços que nem chegaram ao conhecimento da grande massa. Hoje o Google vem buscando novas estratégias para ampliar seus recursos e receitas, e a mais utilizada recentemente foi a utilização de publicidade em meios de comunicação massiva e a utilização de estratégias inovadoras de marketing social.
Com a divulgação de virais pela internet em redes sociais como twitter, youtube dentre outras ferramentas o público ainda se limitava àqueles que tinham acesso a internet, hoje como a nova aposta do Google na TV digital, nada melhor do que utilizar o marketing em rede nacional por meio da televisão. Desde 2010 o Google vem utilizando Comerciais de TV como alternativa de expansão e divulgação dos serviços oferecidos pela empresa.
Na televisão já foram distribuídos alguns comerciais do Google Chrome e inicialmente isso vem dando bons resultados, como prova disto o W3C revelou que de janeiro de 2010 até maio de 2011 as estatísticas de uso do Google Chrome subirão em torno de 15% enquanto o Internet Explorer obteve um declínio de aproximadamente 10 %. E este crescimento deverá se acentuar no decorrer deste ano com a disseminação do Google+  a nova Rede social do Google que já está disponível para acesso público.

Abaixo alguns vídeos de comerciais do Google que circulam pela rede.




Galera, o .NET fornece muitos recursos bibliotecas e ferramentas que auxiliam a vida do programador ao desenvolver rotinas de criptografia sejam elas de alto ou até de baixo nível de complexidade e segurança.

Este post dará inicio a uma sequencia de exemplos de criptografia usando .NET em C#. O primeiro exemplo a ser mostrado é um algoritmo de criptografia simples usando o preceito de chave pública, neste algoritmo o texto criptografado pode ser de criptografado mediante a utilização de uma  chave que esta será fornecida para que possibilite que o solicitante da informação possa decifrar a mesma.

Um dos algoritmos mais comuns e fáceis de se desenvolver e o algoritmo baseado em XOR (Disjunção exclusiva ou “OU exclusivo”) com ele é feita uma operação de relacionamento entre caracteres char, obtendo se um novo caractere do outro lado, sendo que se tivermos um dos caracteres conseguimos decifrar o outro.

Em alguns exemplos encontrados na internet o algoritmo XOR é comumente utilizado com uma chave numérica, buscando flexibilizar o algoritmo para possibilitar também uma gama maior de combinações de chaves obtendo assim um grau de segurança maior ao algoritmo.

Então vamos ao código:

private string CriptografiaXor(string texto, string chave){
    // Variavel que receberá o resultado do processode criptografia.
string textoNovo = "";
    // Primeiramente pegamos a diferenca de tamanho das duas strings.
    int diff = (texto.Length - chave.Length);
    // Se houver a diferença de tamanho temos que colocar a
    // chave com o mesmo tamanho do texto para que o Xor aconteça sem erros.
    if (diff > 0){
        // Calculamos o resto e a quantidade de vezes que iremos repetir a
        // chave para igualar os tamanhos.
        int cont = (int)diff / chave.Length;
        int resto = diff % chave.Length;
        string chaveAux = chave;
        // Neste ponto concatenamos o texto da chave até se igualar os tamanhos.
        for (int i = 0; i < cont; i++){
            chaveAux += chave;
        }

        for (int i = 0; (i < resto); i++){
            chaveAux += chave[i];
        }
        chave = chaveAux;
    }
    // Neste pedaço de código é realizado o processo do XOR.
    for (int i = 0; i < texto.Length; i++){
        int valorChar = Convert.ToInt32(texto[i]);
        int charKey = Convert.ToInt32(chave[i]);
        valorChar ^= charKey;
        textoNovo += char.ConvertFromUtf32(valorChar);
    }

    return textoNovo;
}
// Para utilizar o código é só realizar a chamada do método com o texto a ser criptografado
//ou decifrado juntamente com a chave. Ex.:
// Console.WriteLine(CriptografiaXor("Usando a Criptografia XOR", "12345"));
// Resultado: dARZQ^RvC[C@ZV@RR\Pk{g
// Console.WriteLine(CriptografiaXor("dARZQ^RvC[C@ZV@RR\Pk{g", "12345"));
// Resultado:Usando a Criptografia XOR

Bom proveito galera, futuramente colocarei outras formas de criptografia em C# .NET.

Se você deseja  de-compilar ou realizar o Disassembly de alguma biblioteca ou aplicativo .NET, provavelmente já procurou em vários aplicativos e não encontrou a solução ideal. Porém existe uma aplicação que funciona muito bem para estes fins, o .NET Reflector. Tal aplicação fornece vários recursos para realizar a engenharia reversa em bibliotecas e aplicativos .NET, sem nenhuma dificuldade. E digo mais com esta ferramenta até meu sobrinho de 10 anos consegue abrir o código de bibliotecas .NET facilmente. Abaixo estou descrevendo algumas funções e como adquirir esta ferramenta.

Logo ao iniciar o .NET Reflector ele  fornece uma tela aonde você pode selecionar a versão da Framework instalada em sua maquina, e carrega todos os assemblers da framework. desta forma vc pode desvendar o mundo .NET de acordo com sua linguagem preferida, C#, VB, etc…

Ao selecionar qualquer uma das dlls, abre-se uma arvore com todos os seus atributos e métodos semelhante à arvore do Explorer. Além de mostrar na tela a direita o código fonte correspondente a seleção.

O .NET Reflector, apesar de aparentar ser um aplicativo simples, oferece também o recurso mais desejado na engenharia reversa: ele de-compila todo o projeto salvando o mesmo em arquivo de acordo com a linguagem desejada. Isso se dá através da rotina Export, selecionamos um assembly, clicamos com o botão direito e indo em Export..

 

A utilização destes recursos podem ser muito bem utilizadas em situações de perca de código-fonte e também na correção e melhoria de bibliotecas já compiladas, sem o código fonte. O .NET Reflector é produzido pela empresa RedGate e no site da empresa encontramos o aplicativo para download e as instruções para aquisição da licença do aplicativo. Abaixo os links para obter o .NET Reflector.

Reflector Red Gate

Download versão Trial

 

 


A utilização de mapas em aplicações Desktop tem uma usabilidade enorme, abrangendo quase todos os ramos da indústria e comércio. Os ramos que se destacam são geralmente Logística, automação de força de venda, execução de ordens de serviço, etc…

A idéia deste post é demonstrar como as funcionalidades da API do Google Maps podem auxiliar neste trabalho, além é claro de esclarecer qual API utilizar em determinada ocasião, utilizando-se para este exemplo a Linguagem C#.

A Familia de API’s do Google Maps oferece várias formas de se trabalhar com mapas, a documentação do Google Maps API pode ser encontrada no link. Basicamente podemos descrever as famílias de API’s da seguinte forma:

A API Google Maps Javascript é uma forma de incorporar os mapas do google em paginas HTML e CSS além de programas utilizando se dos recursos de componentes Web Browser.

A API Google Maps for Flash funciona basicamente como a JavaSvript porém a mesma é mais utilizada na Web pela necessidade de se utilizar o Flash.

A API Google Earth API integra funções do Google Earth em páginas da Web.

A API Google Maps Static Maps fornece imagens estáticas seguindo solicitações da WEB que retornam a imagem desejada.

A API do Google Maps Web Services possui uma ferramenta de solicitação e resposta de inbformações via Web Services, esta API é muito utilizada por aplicações que necessitam apenas da informação de rotas e geolocalização para que estas informações sejam tratadas na própria aplicação.

A API Google Maps Data é uma das mais novas ferramentas do Google Maps ela permite que aplicativos cliente visualizem, armazenem e atualizem dados de mapas na forma de feeds da API de dados do Google usando um modelo de dados de recursos. mapas(marcadores, linhas e formas) e mapas (coleções de recursos).

Para simplificar o uso destas ferramentas estou disponibilizando um aplicativo exemplo com a utilização de alguns dos recursos de APIs do Google Maps. Especificamente mostrando as três principais API’s Static Maps e a JavaScript API além de um recurso de busca pelo próprio site do Google Maps.

Download

Real Player

Sempre que é preciso de um vídeo bacana seja ele por motivos variados, o Youtube é a ferramenta correta para consegui-los. Porém conseguir extrair o vídeo do site se torna um desafio, devido a imensa gama de ferramentas pagas para tanto. Uma maneira simples de se obter os vídeos é utilizando-se do player multimídia Real Player. Pouca gente sabe mais o player já vem com o software de download de vídeos embutido. Para realizar o download de vídeos do youtube basta baixar o Real player a partir do link abaixo:

Download real player

Depois da instalação basta tocar o vídeo no browser ao clicar com o botão direito sobre o vídeo é só clicar em download vídeo to Real Player. Dai então é só alegria..

Seja você um desenvolvedor, webdesigner ou até mesmo é um daqueles que adoram dar uma turbinada do seu Windows ou Linux modificando o visual dos Ícones do sistema. Para todos os perfis descritos anteriormente, esses sites são muito úteis. Por meio deles voce pode encontrar uma grande variedade de Ícones e imagens de vários formatos e tamanhos. Os links se seguem abaixo:
http://www.iconspedia.com/ – A Wikipédia dos ícones, com diversos pacotes completos de ícones em alta resolução;(Sistematiqueiros Recomenda)

http://www.iconesbr.net/ – ótimo site brasileiro com uma vasta coletânia de ícones;

http://www.iconarchive.com/ – Mais de 200 mil ícones para download grátis;

http://www.iconesgratis.com.br/ – Quase 20 mil ícones gratuitos na webt;

http://www.plugmasters.com.br/downloads/icones/ – Banco de ícones do site plugmasters;

http://converticon.com/ – Aplicativo on-line para conversão de imagens PNG em ícones; (Sistematiqueiros Recomenda)

Para aqueles que precisem de um auxilio na organização das ações no dia-a-dia. Este software  é muito prático e oferece recursos como Lembretes, calendário, notificações, e muito mais. Vale a pena conferir.

Download: Downloads info

Imagina só se o Natal tivesse acontecido na era digital hein!?

A melhor maneira de se formatar campos de data com padrões customizáveis na linguagem C# é utilizando o comando DateTime.ToString().

Exemplo:

DateTime Data = DateTime.Now;

string Str_Data = Data.ToString(“dd/mm/yyyy”);
Console.WriteLine(Str_Data);

/*

* Resultado:

* 14/12/2010

*/

Com ele podemos realizar qualquer conversão de data para string, independendo do estilo de formatação. Basta seguir a padronização de campos que poderemos assim gerar o estilo desejado para a formatação. Os padrões de formatação são os seguintes:

Os conjuntos de caracteres a seguir são usados para definir diferentes padrões de visualização;
d –   Representa o dia do mês como um número de 1 até 31. Para dígitos simples o dia é formatado sem o zero a esquerda;
dd –   Representa o dia do mês como um número de 01 até 31. Para dígitos simples o dia é formatado com o zero a esquerda;
ddd –   Representa o nome do dia da semana abreviado em três dígitos (em inglês: Mon, Tues, Wed, etc…; em Pt-br: Seg, Ter, Qua, etc…);
dddd –   Representa o nome do dia da semana complet(Monday, Tuesday, Segunda, terça, etc…);
h –   Hora no padrão de 12h (exemplo: 7);
hh –   Hora no padrão de 12h com zeros a esquerda (exemplo: 07);
H –   Hora no padrão 24h (exemplo: 19);
HH –   Hora no padrão 24h, com zeros a esquerda (exemplo: 19);
m –   Minutos;
mm –   Minutos com zero a esquerda;
M –   Mês (numérico);
MM –   Mês numérico com zero a esquerda;
MMM –   Nome do mês abreviado (exemplo: Dez, Jan, etc…);
MMMM –   Nome completo do mês (exemplo: Dezembro, Janeiro, etc…);
s –   Segundos;
ss –   Segundos com zeros a esquerda;
t –   Abreviação de AM / PM (exemplo: A ou P);
tt –   AM/PM;
y –   Ano sem o dígito zero a esquerda (exemplo: 2001 mostraria 1);
yy –   Ano, com o dígito zero a esquerda (exemplo: 2001 mostraria 01);
yyyy –   Ano com quatro dígitos;
K –   Representa as informações de fuso horário de um valor de data e hora (por exemplo, +05:00);
z –   Com valores DateTime, representa o deslocamento assinado da zona de operação local do sistema na hora do Tempo Universal Coordenado (UTC), medido em horas. (Por exemplo, 6);
zz –   Como z porém com digito zero a esquerda;
zzz –   Com valores DateTime, representa o deslocamento assinado da zona de operação local do sistema na hora do Tempo Universal Coordenado (UTC), medido em horase minutos. (Por exemplo, 06:00);
f –   Representa o dígito mais significativo da fração de segundo, ou seja, ela representa a décimos de segundo em um valor de data e hora;
ff –   Representa os dois dígitos mais significativos da fração segundos, ou seja, ele representa os centésimos de segundo em uma data e valor de tempo;
fff –   Representa os três dígitos mais significativos da fração segundos, ou seja, ele representa os milissegundos em um valor de data e hora;
ffff –   Representa os quatro dígitos mais significativos da fração segundos, ou seja, ela representa a dez milésimos de segundo em um valor de data e hora. Embora seja possível visualizar a dez milésimos de um segundo componente de um valor de tempo, esse valor pode não ser significativo. A precisão da data e valores tempo depende da resolução do relógio do sistema. No Windows NT 3.5 e posterior, e os sistemas operacionais Windows Vista, a resolução do relógio é de aproximadamente 10-15 milissegundos;
fffff –   Representa os cinco dígitos mais significativos da fração segundos, ou seja, ela representa o milésimo de segundo em um valor de data e hora. (Tem as mesmas observações de precisão anteriores);
ffffff –   Representa os seis dígitos mais significativos da fração de segundos, ou seja, ele representa a milionésimos de segundo em um valor de data e hora. (Tem as mesmas observações de precisão anteriores);
fffffff -   Representa os sete dígitos mais significativos da fração segundos, ou seja, ela representa a dez milionésimos de segundo em um valor de data e hora. (Tem as mesmas observações de precisão anteriores);
F –   Representa o dígito mais significativo da fração de segundo, ou seja, ela representa a décimos de segundo em um valor de data e hora. Nada é exibido se o dígito é zero;
: –   Representa o separador de hora definido na propriedadeDateTimeFormatInfo.TimeSeparator atual. Este separador é usado para diferenciar horas, minutos e segundos;
/ –   Representa o separador da data definida na propriedade DateTimeFormatInfo.DateSeparator atual. Este separador é utilizado para diferenciar anos, meses e dias;
–   Representa uma string (aspas). Exibe o valor literal de uma string entre duas aspas (“) O aplicativo deve preceder cada aspas com um caracter de escape (\);
–   Representa uma seqüência de caracteres entre aspas (apóstrofe). Exibe o valor literal de uma string entre dois caracteres de apóstrofo (‘);

Observações
“\c” representa o caractere de escape, exibindo o caractere “c” como um literal quando qualquer caractere é precedido pelo caractere de escape (\), este é exibido em sua forma literal. Para inserir o caractere barra invertida na seqüência de resultado, o aplicativo deve usar dois caracteres de escape (“\\”).

Desta forma se quisermos queum objeto DateTime fique assim:

“Data: 14/12/2010 – Hora: 08:35:22″

Devemos fazer assim:

DateTime Data = DateTime.Now;
string StrData = Data.ToString(“‘Data: ‘ dd/MM/yyyy ‘-’ ‘Hora: ‘HH’:'mm’:'ss”);

Console.WriteLine(StrData);

/*

* Resultado:

* Data: 14/12/2010 – Hora: 08:25:32

*/

Lembrando que usando aspas simples o texto sai como no literal, não considerando os separadores de data e hora configurados atualmente.

Fonte: http://www.geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm

Um jeito bem simples de se realizar copia de arquivos e pastas é usando o namespace System.IO

Dentre as varias funcionalidades contidas neste namespace, temos a classe Directory que é uma mão na roda quando necessitamos realizar cópias de pastas e a classe File para realizarmos cópias de arquivos, aqui vai um exemplo que utiliza as duas classes.

private void CopiaPastaEArquivos(string Path_Origem, string Path_Destino, bool MostraMensagem)
{
// O método recebe uma flag para definir se o método mostra ou não a mensagem de
// conclusão de cópia
// Verifica se o diretorio de Destino é existente
if (!Directory.Exists(Path_Destino))
{
// Voce pode tambem criar a pasta manualmente usando o método CreateDirectory
// Directory.CreateDirectory(Path_Destino);
MessageBox.Show(“Pasta de origem inválida!!”);
BackgroundWorkerCopia.CancelAsync();
return;
}
// Variaveis de controle durante a cópia dos arquivos.
string Nome_Arquivo = “”;
string Arquivo_Destino = “”;
string Subdiretorio;
// Primeiramete verificamos se a pasta de origem existe
if (System.IO.Directory.Exists(Path_Origem))
{
// O método GetFiles retorna um vetor com todos os arquivos dentro da pasta
string[] Lista_Arquivos = Directory.GetFiles(Path_Origem);
// O método GetDirectories retorna um vetor com todos as subpastas dentro da pasta
string[] Lista_Diretorios = Directory.GetDirectories(Path_Origem);
// Se existem subdiretorios, temos que chamar o método recursivamente copiando
// os arquivos e subpastas
if (Lista_Diretorios.Length > 0)
{
// Percorre o vetor armazenando o caminho de cada subdiretorio da pasta
foreach (string Diretorio in Lista_Diretorios)
{
// Desta maneira pegamos a pasta que esta selecionada e criamos na
// pasta de destino caso ela não exista
Subdiretorio = Path_Destino + “\\” +
Diretorio.Substring(Diretorio.LastIndexOf(“\\”));
if (!Directory.Exists(Subdiretorio))
Directory.CreateDirectory(Subdiretorio);
// Chama o método recursivamente copiando as sub-pastas e arquivos contidos nelas
CopiaPastaEArquivos(Diretorio, Subdiretorio, false);
}
}
// Se existem arquivos, temos que chamar o método File.Copy para cada arquivo
if (Lista_Arquivos.Length > 0)
{
// Percorre o vetor de arquivos, lembrando que este vetor foi atribuido anteriormente e recebe
// o nome dos arquivos da pasta juntamente com o caminho dos mesmos
foreach (string Arquivo in Lista_Arquivos)
{
// O metodo Path.GetFileName(string Path) retorna a o nome do arquivo extraindo assim o caminho do path
Nome_Arquivo = Path.GetFileName(Arquivo);
/*
Voce pode tambem filtrar os arquivos por extensão usando o método Path.GetExtension(string path);
exemplo:
string extensao = Path.GetExtension(Arquivo)
if(extensao.Equals(“.exe”))
……..
*/
// Temos que criar o nome do arquivo de destino usando o método Path.Combine(string Path1, string Path2);
// combinando o nome do arquivo e a pasta de destino.
Arquivo_Destino = Path.Combine(Path_Destino, Nome_Arquivo);
// Por fim copiamos os arquivos para a pasta de destino.
File.Copy(Arquivo, Arquivo_Destino, true);
}
}
}
else
MessageBox.Show(“Pasta ” + Path_Origem + ” Inexistente!!”);
if (MostraMensagem)
MessageBox.Show(“Copia efetuada com sucesso!!”);
}
}