Espiadinha no IIS Express

Volta e meia eu tenho que olhar as configurações do IIS Express,

para acessar o arquivo está em:

%systemdrive%\Users\[NomeUsuario]\Documents\IISExpress\config\ApplicationHost.config

fonte: http://stackoverflow.com/questions/21202885/how-can-i-change-iis-express-port-for-a-site

Anúncios

Montado Assembly

Durante o processo de compilação de uma solução Visual Studio 2013 via linha de comando era apresentado a seguinte mensagem de erro

error MSB4175: The task factory "CodeTaskFactory" could not be loaded from the assembly "C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Build.Tasks.v4.0.dll". Could not load file or assembly 'file://C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Build.Tasks.v4.0.dll' or one of ots dependencies. The system cannot find the file specified.

Após pesquisa e tentava e erro a solução foi simples:

Copiar o arquivo de 

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll

para

C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Build.Tasks.v4.0.dll

Aparentemente após o Visual Studio 2012 o builder foi separado do .Net Framework, ficando na nova pasta

C:\Program Files (x86)\MSBuild\12.0\bin\amd64

mas lá só tinha a versão 12 do arquivo em questão.

Após copiar a versão 4, tudo funcionou.

Troca de Informações Confidenciais

Estava eu trabalhando em um projeto com WCF  (Windows Communication Foundation) onde queria retornar uma classe mais simples de dado, por exemplo sem tantas propriedades.

Qual foi a minha primeira ideia (e que executei), criar uma interface, por exemplo:

public interface IPessoa
{
string Nome { get; }
int Idade { get; }
}

E criei a classe:

public class Pessoa : IPessoa
{
public string Nome { get; set; }
internal DateTime DataNascimento { get; set; }
public int Idade { get; { return Convert.ToInt32((DateTime.Today -      DataNascimento).TotalDays / 365.0);}}
}

O legal é que tudo parece funcionar, o serviço compila e tudo mais. Pena que não é a maneira correta alem de não funcionar. O correto é criar apenas uma classe e colocar atributos sobre os elementos que devem ser serializados, assim:
[DataContract]
public class Pessoa : IPessoa
{
public Pessoa(string nome, DateTime dataNascimento)
{
Nome = nome;
DataNascimento = dataNascimento;
Idade = Convert.ToInt32((DateTime.Today - DataNascimento).TotalDays / 365.0);
}
[DataMember]
public string Nome { get; set; }
public DateTime DataNascimento { get; set; }
[DataMember]
public int Idade { get; set; }
}

Também é bem simples e nesse caso funciona.

Autenticação com o Twitter em várias etapas

OAuth

Comecei a estudar sobre a autenticação OAuth para utilizá-la com o Twitter. Protocolo utilizado em muitos serviços web e é a forma mais segura de permitir que uma terceira aplicação acesse um serviço  (o Twitter no caso) de maneira segura e prática.

Uma forma de utilizar o Twitter seria solicitando aos usuários que informassem seu usuário e senha para a aplicação intermediária (vou chamá-la de Hub). Um exemplo pode ser visto na  figura abaixo.

Twitter

Esse modelo apresenta diversos problemas ligados à segurança. Informando o usuário e senha para o Hub, esta aplicação pode realizar qualquer operação no Twitter em nome do usuário, inclusive realizar alterações no perfil.

Justamente para resolver esse problema, foi criado o OAuth que restringe o acesso a operações determinadas sem o fornecimento de senhas para o Hub. O processo pode ser visto na figura abaixo.

OAuth

A autenticação acontece da seguinte forma:

O Hub realiza uma solicitação ao Twitter pedindo um endereço, para que um usuário se vincule a ele. Quando o usuário final visualiza a página, é solicitada para confirmar ao Twitter se perfil de usuário e concordar ou não com a vinculação de seu perfil com o Hub. A página já estamos acostumados a ver.

Twiiter

Após essa confirmação, o Twitter chama o Hub, informando uma nova chave gerada sem vinculação com o usuário e senha reais. Isso garante que o Hub desconhece os dados do usuário.

Continuar lendo

Desenvolvimento com Amazon DynamoDB

A Amazon fornece um kit para desenvolvimento (software development kit ou SDK em inglês) para as tecnologias: Android, iOS, Java, .NET, PHP e Ruby. Esse kit permite o desenvolvimento e integração com toda a plataforma de serviços em nuvem da Amazon, inclusive com o DynamoDB.

Como o Kwitter foi desenvolvido em .NET, existem duas formas de realizar a codificação:

  • Primeira é utilizando .NET Low-Level API que fornece um controle maior sobre a codificação (pode-se realizar a analogia com o ADO.NET).
  • Segunda é .NET Object Persistence Model que possui uma abstração ainda maior agilizando o desenvolvimento de rotinas mais simples (análogo ao ADO.NET Entity Framework).

Nesse projeto utilizou-se uma junção de ambos. Na parte de gravação de registros, foi utilizado .NET Object Persistence Model, já, na parte de consultas seletivas (query), foi utilizada a .NET Low-Level API. Isso permitiu um controle melhor e mais especifico buscando o melhor desempenho nas consultas.

O principal motivo pelo qual o DynamoDB foi escolhido entre os bancos de dados apresentados foi pelo fornecimento da infraestrutura juntamente com o SGBD. Como já mencionado, esse critério foi plenamente atendido pela Amazon, fornecendo uma arquitetura robusta e escalável a um valor justo.

Uma das principais ressalvas é com relação ao modelo de consistência eventual. Porém, isso não se tornou um problema em vista que a mensagem é um registro estável, uma vez gravada não é mais alterada, o que pode ocorrer é a alteração na taxonomia necessitando uma reanalise de cada mensagem, mas isso não é uma necessidade constante.

Mesmo que as mensagens fossem seguidamente alteradas, seria necessária uma quantidade muito grande de acessos multiusuário ao mesmo registro para causar problemas, já que a latência da aplicação é muito baixa.

Uma das grandes dificuldades percebida é que a equipe de desenvolvimento tem que se adaptar aos novos tempos. O desenvolvimento tem que pensar em como fazer melhor uso da arquitetura, pois agora o custo de uso é medido rapidamente. No modelo de banco de dados relacional quando uma aplicação não está obtendo muito desempenho deixa-se ao cargo do DBA criar índices ou stored procedure. Neste paradigma a criação de uma nova tabela vai necessitar de desenvolvimento, além de um monitoramento das métricas do sistema, mas enquanto isso não acontece o custo de aumentar a vazão de uma determinada tabela pode ser alto.

O DynamoDB atendeu todas as expectativas de um banco de dados, o autor desse trabalho com base na experiência de 8 anos utilizando o modelo relacional, o DynamoDB se encaixaria em muitas dessas aplicações, em alguns casos muito melhor que o banco relacional adotado. Um exemplo é o sistema para controle de ponto eletrônico onde é necessário armazenar cada uma das batidas de cada funcionário. Continuar lendo