Arquivo da categoria: C#

Microsoft abre código de ASP.NET Web API e ASP.NET Web Pages

Fonte: IMasters

Com informações de The H

A Microsoft abriu o código da ASP.NET Web API e da ASP.NET Web Pages sob a licença Apache 2.0. A Web API e a Web Pages, também conhecida como Razor, encontraram um novo lar na plataforma de hospedagem CodePlex da Microsoft.

Agora, desenvolvedores que não são da Microsoft podem contribuir com pacotes e com código nos utilitários de desenvolvimento web – entretanto, isso ainda será avaliado pelos desenvolvedores da Microsoft.

De acordo com Scott Guthrie, vice-presidente da divisão de desenvolvimento da Microsoft, a empresa tomou um caminho semelhante com o Windows Azure SDK e afirma ter sido uma experiência positiva. A iniciativa não muda o status das três ferramentas como sendo totalmente suportadas pelos projetos da Microsoft.

A ASP.NET Web API é um framework para escrever aplicações RESTful usando a plataforma .NET, que teve sua origem na Windows Communication Foundation. A Razor/ASP.NET Web Pages é uma linguagem de template baseada em C# que pode ser usada para combinar código de servidor com HTML para criar páginas geradas dinamicamente.

C# – Calculando o CRC de strings e arquivos

Fonte: José Carlos Macoratti/IMasters

O CRC – Cyclic redundancy check, ou verificação de redundância cíclica, é um código detector de erros cujo algoritmo é muito usado em protocolos de comunicação diferentes, empacotamento e desempacotamento de algoritmos para garantir a robustez dos dados.

A ideia por trás do CRC é simples – calcular um checksum original (sequência de verificação de quadros) para cada quadro de dados, baseada em seu conteúdo, e colar o checksum no final de cada mensagem. Uma vez que os dados são recebidos, é possível realizar o mesmo cálculo e comparar os resultados – se os resultados são semelhantes, a mensagem é válida.

O CRC é calculado e anexado na informação a transmitir (ou armazenar), sendo verificado após a recepção ou o acesso, para confirmar se não ocorreram alterações.

O CRC é popular por ser simples de implementar em hardware binário, simples de ser analisado matematicamente, e pela eficiência em detectar erros típicos causados por ruído em canais de transmissão.

A utilidade do CRC advém das seguintes propriedades:

  1. Como todos os bits são usados no cálculo do CRC, a mudança em apenas um bit provoca uma mudança no CRC.
  2. Mesmo mudanças pequenas nos dados levam a CRCs muito diferentes. Experiências com o CRC-32 (usando polinômios de 32 bits) mostram que é muito raro que a introdução de erros nos dados não seja detectada pelo CRC.
  3. A probabilidade de qualquer dos 232 valores possíveis para o CRC é praticamente uniforme.

Existem diferentes tipos de CRC que podem ser calculados: CRC-32, CRC-16, CRC-12, CRC-8 etc.

Para realizarmos cálculos envolvendo o CRC temos que utilizar o namespace System.Security.Cryptography e neste artigo eu vou calcular o CRC de strings e arquivos.

Vamos abrir o Visual C# 2010 Express Edition e, no menu File-> New Poject, selecione o Template Windows Forms Applicacion com o nome Calculando_CRC.

No menu Project -> Add Class, inclua uma classe com o nome CrcStream com o seguinte código:

using System.IO;

namespace Macoratti
{
/// <summary>
/// Encapsula um <see cref="System.IO.Stream" /> para calcular o checksum CRC32
/// em tempo de execução
/// </summary>
public class CrcStream : Stream
{
/// <summary>
/// Encapsula um <see cref="System.IO.Stream" />.
/// </summary>
/// <param name="stream">O stream para calcular o checksum.</param>
public CrcStream(Stream stream)
{
this.stream = stream;
}

Stream stream;

/// <summary>
/// Obtem o stream.
/// </summary>
public Stream Stream
{
get { return stream; }
}

public override bool CanRead
{
get { return stream.CanRead; }
}

public override bool CanSeek
{
get { return stream.CanSeek; }
}

public override bool CanWrite
{
get { return stream.CanWrite; }
}

public override void Flush()
{
stream.Flush();
}

public override long Length
{
get { return stream.Length; }
}

public override long Position
{
get
{
return stream.Position;
}
set
{
stream.Position = value;
}
}

public override long Seek(long offset, SeekOrigin origin)
{
return stream.Seek(offset, origin);
}

public override void SetLength(long value)
{
stream.SetLength(value);
}

public override int Read(byte[] buffer, int offset, int count)
{
count = stream.Read(buffer, offset, count);
readCrc = CalculateCrc(readCrc, buffer, offset, count);
return count;
}

public override void Write(byte[] buffer, int offset, int count)
{
stream.Write(buffer, offset, count);

writeCrc = CalculateCrc(writeCrc, buffer, offset, count);
}

uint CalculateCrc(uint crc, byte[] buffer, int offset, int count)
{
unchecked
{
for (int i = offset, end = offset + count; i < end; i++)
crc = (crc >> 8) ^ table[(crc ^ buffer[i]) & 0xFF];
}
return crc;
}

static private uint[] table = GenerateTable();

static private uint[] GenerateTable()
{
unchecked
{
uint[] table = new uint[256];

uint crc;
const uint poly = 0xEDB88320;
for (uint i = 0; i < table.Length; i++)
{
crc = i;
for (int j = 8; j > 0; j--)
{
if ((crc & 1) == 1)
crc = (crc >> 1) ^ poly;
else
crc >>= 1;
}
table[i] = crc;
}
return table;
}
}

uint readCrc = unchecked(0xFFFFFFFF);

/// <summary>
/// Obtem o checksum CRC dos dados que foram lidos pelo stream
/// </summary>
public uint ReadCrc
{
get { return unchecked(readCrc ^ 0xFFFFFFFF); }
}

uint writeCrc = unchecked(0xFFFFFFFF);

/// <summary>
/// Obtem o checksum CRC dos dados que foram escritos para o stream
/// </summary>
public uint WriteCrc
{
get { return unchecked(writeCrc ^ 0xFFFFFFFF); }
}

/// <summary>
/// Reseta a leitura e escrita dos checksums.
/// </summary>
public void ResetChecksum()
{
readCrc = unchecked(0xFFFFFFFF);
writeCrc = unchecked(0xFFFFFFFF);
}
}
}

autor: http://www.codeproject.com/Members/reinux

Agora vamos definir no formulário form1.cs uma interface bem simples, na qual iremos informar o nome do arquivo e calcular o seu CRC.

Abaixo, vemos o formulário que usa os controles TextBox e Button:

No evento Click do botão de comando – Calcula CRC -, vamos incluir o código que usa a classe CrcStream para calcular o CRC do arquivo:

using System;
using System.Windows.Forms;
using System.IO;
using Macoratti;

namespace Calculando_CRC
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

FileStream file = null;
CrcStream stream = null;

private void btnCalculaCRC_Click(object sender, EventArgs e)
{
if (txtArquivo.Text == string.Empty)
{
MessageBox.Show("Informe o nome do arquivo.");
return;
}

string arquivo = txtArquivo.Text;

//Abre um fluxo de stream e o encapsula em um CrcStream
try
{
file = new FileStream(arquivo, FileMode.Open);
stream = new CrcStream(file);
}
catch (Exception ex)
{
MessageBox.Show("Erro ao acessar o arquivo :  " + ex.Message);
return;
}

//Usa o arquivo - neste caso le o arquivo como uma string
StreamReader reader = new StreamReader(stream);
string texto = reader.ReadToEnd();

//Imprime o checksum calculado
txtCRC.Text = stream.ReadCrc.ToString("X8");
}
}
}

Executando o projeto, iremos obter para um determinado arquivo informado:

Pegue o projeto completo aqui: Calculando_CRC

Conhecendo o F#

Como você sabe, existem algumas linguagens OOP por aí. Você provavelmente conhece VB.Net, C# e Java, mas eu vou falar de uma relativamente nova.

Gostaria de falar um pouco sobre F#.

Similar ao C# e ao VB.Net, o F# também é direcionado para o Framework .Net e também é orientado a objeto.

A principal diferença no F# não é sua sintaxe única, mas sim o novo ponto de vista e o estado de espírito que traz para a programação orientada a objeto.

O F# usa inferência de tipos – o que significa que o programador não precisa se preocupar com a declaração de tipo e pode apenas utilizar a palavra reservada “let” (que é similar a “var”). A declaração do tipo de dados será deduzida pelo compilador durante a compilação (o F# também permite a declaração explícita de tipos de dados).

Depois dessa pequena introdução ao F# (bem pequena), gostaria de começar a parte prática. E este artigo será sobre Listas no F#.

Vamos fazer um pequeno experimento:

Crie uma lista de ints no C#

List<int> newList = new List<int>();

Adicione os seguintes valores a essa lista:

newList.Add(5);
newList.Add(2);
newList.Add(-3);
newList.Add(1);

Agora por favor tente classificá-la usando valor absoluto.

Você provavelmente descobrirá que se você tentou fazer isso, você usou a funcionalidade da programação.

No F#, é quase o mesmo, e fica o mais fácil possível, uma vez que você chega neste ponto:

[5; 2; -3; 1] |> List.sortBy(fun intElem -> abs intElem)

Vamos testar nossas habilidades no C# mais uma vez mapeando a lista de ints (cada número será aumentado em 3).

Mais uma vez, a maioria de vocês que se saiu bem usando LINQ ou outra programação funcional que o C# permite, é assim que funcional no F#:

[5; 2; -3; 1] |> List.map(fun x-> x * x * x)

Outro teste para o poder do nosso C# (ou Java) será tentar filtrar essa lista para ints que retornam 0 quando divididas por 2. No F#, é fácil assim:

[5; 2; -3; 1] |> List.filter(fun x -> x % 2 = 0)

Esses foram apenas alguns exemplos sobre o F# e sua usabilidade. Espero que ajude você a compreender a sintaxe, e mais importante – que ajude você a pensar em programação funcional.

Falando nisso, como podemos esquecer o imortal primeiro programa: “Hello World!” ?

printfn "Hello World!"

Texto original disponível em http://www.devaffair.com/2011/01/first-steps-in-f-sharp.html

Fonte: IMasters

Conhecendo o F#

Como você sabe, existem algumas linguagens OOP por aí. Você provavelmente conhece VB.Net, C# e Java, mas eu vou falar de uma relativamente nova.

Gostaria de falar um pouco sobre F#.

Similar ao C# e ao VB.Net, o F# também é direcionado para o Framework .Net e também é orientado a objeto.

A principal diferença no F# não é sua sintaxe única, mas sim o novo ponto de vista e o estado de espírito que traz para a programação orientada a objeto.

O F# usa inferência de tipos – o que significa que o programador não precisa se preocupar com a declaração de tipo e pode apenas utilizar a palavra reservada “let” (que é similar a “var”). A declaração do tipo de dados será deduzida pelo compilador durante a compilação (o F# também permite a declaração explícita de tipos de dados).

Depois dessa pequena introdução ao F# (bem pequena), gostaria de começar a parte prática. E este artigo será sobre Listas no F#.

Vamos fazer um pequeno experimento:

Crie uma lista de ints no C#

List<int> newList = new List<int>();

Adicione os seguintes valores a essa lista:

newList.Add(5);
newList.Add(2);
newList.Add(-3);
newList.Add(1);

Agora por favor tente classificá-la usando valor absoluto.

Você provavelmente descobrirá que se você tentou fazer isso, você usou a funcionalidade da programação.

No F#, é quase o mesmo, e fica o mais fácil possível, uma vez que você chega neste ponto:

[5; 2; -3; 1] |> List.sortBy(fun intElem -> abs intElem)

Vamos testar nossas habilidades no C# mais uma vez mapeando a lista de ints (cada número será aumentado em 3).

Mais uma vez, a maioria de vocês que se saiu bem usando LINQ ou outra programação funcional que o C# permite, é assim que funcional no F#:

[5; 2; -3; 1] |> List.map(fun x-> x * x * x)

Outro teste para o poder do nosso C# (ou Java) será tentar filtrar essa lista para ints que retornam 0 quando divididas por 2. No F#, é fácil assim:

[5; 2; -3; 1] |> List.filter(fun x -> x % 2 = 0)

Esses foram apenas alguns exemplos sobre o F# e sua usabilidade. Espero que ajude você a compreender a sintaxe, e mais importante – que ajude você a pensar em programação funcional.

Falando nisso, como podemos esquecer o imortal primeiro programa: “Hello World!” ?

printfn "Hello World!"

Texto original disponível em http://www.devaffair.com/2011/01/first-steps-in-f-sharp.html

Fonte: IMasters

Token e Sessão Corrente com C#.NET

Hoje vou falar um pouco e mostrar via código como pegar o número do token ou sessão corrente do usuário que está navegando em seu sistema ou site. Lembro que esse código serve para qualquer tipo de aplicativo.

Usado: Visual Studio .NET 2010, Linguagem C#.NET, Plataforma ASP.NET.

O que vou falar é simples de fazer, porém, quase ninguém sabe que existe esse tipo de informação disponível no framework .NET.

Geralmente, esse tipo de informação é utilizada em sistema de comércio eletrônico que guarda as informações do usuário relacionando a um número qualquer, que pode ser um token ou sessão corrente.

O primeiro passo é importar uma classe dentro da classe principal do sistema.

using System.Security.Principal;

Para pegar o token corrente, coloque o código:

WindowsIdentity.GetCurrent().Token.ToString();

O código acima busca um número do token que pode ser gerado a cada acesso. Para manter o mesmo código é bom pegar o valor e gerar em uma sessão ou token.

Para pegar a sessão corrente, coloque o código:

Session.SessionID.ToString();

Para testar, você pode mandar escrever os valores na tela com o Response.Write.

protected void Page_Load(object sender, EventArgs e)
{
Response.Write(WindowsIdentity.GetCurrent().Token.ToString());
Response.Write("<Br><br>"+Session.SessionID.ToString());
}

No meu teste, foi impresso na tela os seguintes dados.

1316 - Token
ts3iammnrqpdrvxcjgjwrss2 - Sessao

Note que o token é um número com 4 dígitos e a sessão é composta de números e letras. Dependendo do que está precisando um ou outro pode ser de grande valia.

É isso. Espero que tenha gostado e qualquer dúvida pode entrar em contato pelo site.

Fonte: Maurício Junior/IMasters