SignalR – Introdução, tipos de conexão e exemplo simples de utilização

Standard

Este post é uma introdução rápida e simplificada de uma série de artigos que pretendo publicar sobre a biblioteca SignalR. Minha ideia é publicar alguns artigos desta fantástica biblioteca, demonstrado o poder e facilidade para criar aplicações web com informações/atualizações em tempo real.

 

SignalR, o que é?

Basicamente, é uma biblioteca em .Net e de código livre, que viabiliza atualizações/notificações asíncronas em tempo real para aplicações web. Ou seja, ela permite enviar dados e informações entre client/server em tempo real. Legal em!

A Microsoft já oferece suporte ao SignalR, o mesmo abrange aplicações em Javascript, Silverlight, .Net, Windows Phone 7 e WinRT. Além da Microsoft a comunidade open source forneceu apoio para Mono e iOS também.

 

Mas o .Net Framework 4.5 não suporta Websockets, utilizado para recursos em tempo real?

Sim, e aconselho o estudo e aprendizado em Websockets, onde, com o framework 4.5 é possivel utilizar seus recursos com o namespace System.Web.WebSockets, porém, trabalhar com Websockets requer no mínimo o framework 4.5 e o IIS8 ou IIS8 Express para utiliza-lo. Sem contar que infelizmente apenas o Chrome 16++, Firefox 11++ e IE 10 o suportam.

Desta forma, hoje, estou utilizando o SignalR para aplicações em tempo real.

  Continue reading

Resumo de artigos publicados no TechNet Wiki até hoje (13/07/2012)

Standard

Para você que não conhece o TechNet Wiki tenho uma coisa para contar, você está perdedo tempo, além de uma grande variedade de temas e conteúdos, existe uma página totalmente em pt-BR. Wink

Atualmente, na página de Desenvolvimento existem diversos artigos interessantes, no total, eu já publiquei 15 artigos, alguns deles já publicados aqui também!

Veja abaixo minhas publicações até hoje 13/07/2012:

 

ASP.NET MVC

ASP.NET MVC – Autenticação Básica
http://social.technet.microsoft.com/wiki/contents/articles/6466.aspx

ASP.NET MVC – Verificando se a Action solicitada existe em uma requisição
http://social.technet.microsoft.com/wiki/contents/articles/6465.aspx

ASP.NET MVC – Evitando ataques de Redirecionamento
http://social.technet.microsoft.com/wiki/contents/articles/6464.aspx

ASP.NET MVC – Validando os parâmetros na requisição de uma URL
http://social.technet.microsoft.com/wiki/contents/articles/6490.asp-net-mvc-validando-os-parametros-na-requisicao-de-uma-url-pt-br.aspx

ASP.NET MVC – Criando uma aplicação multi-idiomas
http://social.technet.microsoft.com/wiki/contents/articles/6491.aspx

ASP.NET MVC – Renderizando Gráficos do Google Chart com Html Helpers
http://social.technet.microsoft.com/wiki/contents/articles/6505.aspx

ASP.NET MVC – Criando uma aplicação MVC compatível com o Windows Azure
http://social.technet.microsoft.com/wiki/contents/articles/6777.asp-net-mvc-criando-uma-aplicacao-mvc-compativel-com-o-windows-azure-pt-
br.aspx

ASP.NET MVC – Trabalhando com vários Submits na mesma View
http://social.technet.microsoft.com/wiki/contents/articles/7374.asp-net-mvc-trabalhando-com-varios-submits-na-mesma-view-pt-br.aspx

 

Windows Azure

Windows Azure – Entendendo as principais Roles
http://social.technet.microsoft.com/wiki/contents/articles/6778.windows-azure-entendendo-as-principais-roles-pt-br.aspx

 

Linq to SQL

Linq to SQL – Trabalhando com Stored Procedures simples
http://social.technet.microsoft.com/wiki/contents/articles/6484.linq-to-sql-trabalhando-com-stored-procedures-simples-pt-br.aspx

Linq to SQL – Trabalhando com Stored Procedures complexas
http://social.technet.microsoft.com/wiki/contents/articles/6485.aspx

Linq to SQL – Escrevendo diretamente com SQL
http://social.technet.microsoft.com/wiki/contents/articles/6486.aspx

Linq to SQL – Utilizando Compiled Query
http://social.technet.microsoft.com/wiki/contents/articles/6487.aspx

Linq to SQL – Adicionando Validações
http://social.technet.microsoft.com/wiki/contents/articles/6488.aspx

Paginação com Linq utilizando Skip e Take
http://social.technet.microsoft.com/wiki/contents/articles/6489.aspx

Você é “dev”? Contribua também!

Abs

 

Criando um repositório genérico para Entity Framework

Standard

Irei demonstrar aqui uma forma bem simples e rápida para implementarmos um repositório genérico com Entity Framework. A ideia de implementação será a mesma utilizada com Linq to SQL, ou seja, nosso repositório será responsável por realizar apenas quatro operações: Selecionar os dados, salvar, apagar e atualizar.

Vamos primeiramente criar uma interface para o repositório:

public interface IRepositorio
{
	void Atualiza();

	void Apaga<TEntidade>(TEntidade entidade) where TEntidade : class;

	void Salva<TEntidade>(TEntidade entidade) where TEntidade : class;

	IQueryable<TEntidade> Seleciona<TEntidade>() where TEntidade : class;
}

Continue reading

Dataflow Programming com C# – Criando Variáveis e Operações

Standard

Conhecemos muito bem a tradicional programação imperativa, onde o estado de nossas variáveis são mutáveis e existe uma sequência pré-definida de comandos para que sejam executados. Já o paradigma de Dataflow (Fluxo de Dados) Programming segue um raciocínio diferente, do tipo “faça apenas quando receber algo”, um exemplo bem simples de como isso funciona: Imagine uma fábrica de roupas com seus dez funcionários, porém, para que eles comecem a trabalhar, primeiro devem receber os tecidos, ou seja, na programação com fluxo de dados a execução do programa depende dos dados de entrada.

A partir do .NET framework 4.5 já é possível utilizar os recursos da programação com fluxo de dados nativamente, utilizando para tanto a biblioteca System.Threading.Tasks.Dataflow. Porém, meu objetivo neste post é outro Tongue out, irei demonstrar como podemos criar variáveis e realizar operações com fluxo de dados em versões anteriores do framework, para ser mais direto irei utilizar a versão 4.0 com um recurso chamado TPL (Task Parallel Library) para programação paralela. Continue reading

Criando um repositório genérico para Linq to SQL

Standard

Vou demonstra aqui uma forma bem rápida e produtiva para criarmos um repositório genérico com Linq to SQL. Basicamente devemos efetuar quatro operações básicas: Selecionar os dados, salvar, apagar e atualizar.

Vejamos como ficaria nossa interface para o repositório genérico:

public interface IRepositorio
{
   void Atualiza();

   void Apaga<TEntidade>(TEntidade entidade) where TEntidade : class;

   void Salva<TEntidade>(TEntidade entidade) where TEntidade : class;

   IQueryable<TEntidade> Seleciona<TEntidade>() where TEntidade : class;
}

Pegou a idéia com Generics? veja a implementação: Continue reading

ASP.NET MVC – Definindo JsonRequestBehavior.AllowGet de forma global

Standard

Pessoal, uma dica bem rápida mas que ajuda muito nosso desenvolvimento do dia-a-dia com MVC, vou mostrar aqui duas maneiras de definir de forma global o Enum JsonRequestBehavior para habilitar requisições GET em nossos controllers. Atualmente quando trabalhamos com ASP.NET MVC (A partir da versão 2) todo retorno de Json deve habilitar requisições GET, veja abaixo:

public UsuarioController : Controller
{
   public ActionResult SelecionaTexto()
   {
       return Json("Retorno", JsonRequestBehavior.AllowGet);
   }
}

Agora veja duas forma bem simples para melhorarmos isso. Continue reading

Cria suas próprias coleções utilizando Iteration Pattern em C#

Standard

Antes de iniciarmos este artigo, é altamente recomendado que você saiba o que é, e como funciona a interface IEnumerable, localizada no namespace System.Collection. Com uma rápida explicação retirada do MSDN, podemos considerar um IEnumerable como:

“Exposes the enumerator, which supports a simple iteration over a non-generic collection.”

Ou seja, é uma interface que expõe o enumerador, e suporta uma iteração simples sobre uma coleção não genérica.

Ok, e o que seria esse “Iteration Pattern” ?

Iteration Pattern é um padrão de desenvolvimento muito utilizado em loops de repetições. É um padrão que viabiliza o acesso sequencial aos elementos de uma dada coleção, sem que seja necessário o conhecimento dos elementos subsequentes. Continue reading

Yoda Conditions com C#

Standard

Acredito que a maioria dos “developers” escreveria uma simples condição como demonstrado abaixo:

int varInt = 1;
if (varInt == 2){
//...
}

bool varBool = false;
if (varBool == true){
//...
}

O que há de errado? Na verdade não existe erro algum nos snippets acima, porém, considere os seguintes erros na digitação do código:

int varInt = 1;
if (varInt = 2){
//...
}

bool varBool = false;
if (varBool = true){
//...
}

Continue reading

Implementando um Extension Method para IEnumerables utilizarem a expressão Soundex

Standard

Imagem 1

 

Vou demostrar neste artigo como podemos criar um Extension Method para coleções (IEnumerable) poderem utilizar um recurso muito utilizado em Transact-SQL chamado Soundex.

Para quem não conhece [ou não sabe nem o que é], a expressão Soundex retorna um código de quatro caracteres utilizado para comparar a semelhança entre duas sequências de caracteres. Ou seja, foneticamente falando, “casa” seria o mesmo que “caza”, ou até mesmo “cazza”, pois o som ao reproduzi-las seria o mesmo.

O algoritmo para a geração dos quatro caracteres para a comparação fonética é realizado utilizando algumas regras e “quase todas” letras do alfabeto. Onde básicamente, as seguintes regras são consideradas:

 

1 – Guarda-se o primeiro caracter da sequência e ignora os demais que forem iguais a (a, e, i, o, u, y, h, w);

2 – concatena-se os próximos caracteres com seu respectivo código:

  • b, f, p, v => 1
  • c, g, j, k, q, s, x, z => 2
  • d, t => 3
  • l => 4
  • m, n => 5
  • r => 6

3 – Dois caracteres adjacentes com o mesmo número são codificados como um único número, assim como, dois caracteres iguais separados por ‘h’ ou ‘w’ são codificados como um número único.

4 – Se houver letras duplicadas, a segunda letra é ignorada

5  – Continue até que o resultado seja três números, ou, preencher com “0” até ficarem três números. Continue reading

Dica Rápida – Default Values com Linq to SQL

Standard

Sabemos que no Sql Server podemos criar colunas de tabelas com valores padrão, ou seja, valores default que serão utilizados caso não passe valor algum para o campo.

Veja a tabela abaixo:

CREATE TABLE TabelaTeste
(
Cod INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
Nome VARCHAR(100) NOT NULL DEFAULT('Zaccanini'),
Valor DECIMAL(18,2) NOT NULL DEFAULT(100), 
Data DATETIME NOT NULL DEFAULT(GETDATE()),
Obs VARCHAR(MAX) NULL
)

Observe que as colunas Nome, Valor e Data possuem valores default. Para realizarmos um insert no próprio Sql Server, podemos fazer algo bem simples, como:

INSERT INTO TabelaTeste DEFAULT VALUES

Algora iremos realizar o mesmo insert, porém, com Linq to SQL.

Para tanto basta definir a propriedade “Auto Generated Value” como “True” nas colunas que possuem valores default, observe abaixo:

Imagem 1

E para o insert:

DB.TabelaTestes.InsertOnSubmit(new TabelaTeste());
DB.SubmitChanges();

Pronto, muito simples e rápido. (Acreditem se quiser, vi muitas dúvidas sobre isto! :P)

 

Abraços.