O Paulovich.Data possuía toda a documentação na wiki do nosso falecido Community Server. E durante a migração para o SubText deixamos isso de lado pra darmos conta de entregar um site novinho pra vocês.
Agora que eu parei de brincar de fazer modificações no SubText
pude me concentrar em disponibilizar novamente a documentação. Optei por hospedar a documentação no Codeplex.
Mas não tive tempo suficente para ajustar imagens e nem de revisar textos. Por isso, espero contar com a ajuda de vocês para termos novamente uma documentação 100%.
Se você não conhece o Paulovich.Data, sugiro que passe por lá! Você vai aprender técnicas avançadas de Reflection, ADO.NET, OO e mais algumas maluquices aleatórias.
Se você é um usuário do Paulovich.Data e tem vontade de contribuir ou tem alguma dúvida, entre em contato.
Postado em @
3/9/2010 11:08 PM
por
Ivan Paulovich
+
Como iniciativa para 2010 os DotNetRaptors começam um novo projeto. A idéia é levarmos notícias da comunidade através de podcasts. E já temos um piloto, está disponível na página dos Raptors o link para download do primeiro episódio.
Passamos por temas diversos como vocês podem ver na chamada, mas eu falei especificamente sobre o Community Zone de Fevereiro e da Copa de Talentos Microsoft que está prestes a ser lançada.
Postado em @
3/9/2010 1:05 PM
por
Ivan Paulovich
Com certeza vocês já viram aplicativos na internet que são criados apenas configurando alguns dados e você tem uma nova instância do serviço. Nos bastidores existe apenas uma aplicação instalada e essa aplicação interpreta a URL para identificar o cliente.
Recentemente eu criei um aplicativo semelhante. Vejam a descrição do requisito:
Ter uma única aplicação ASP.NET que responda a requisições aos endereços meudominio.com/umcliente e meudominio.com/outrocliente, além disso um usuário autenticado no primeiro endereço não deve ter acesso aos recursos do outro cliente.
Vejam que o requisito pede um aplicativo instânciável (ok! fiz isso usando routing). O problema estava em autenticar o usuário apenas na sua pasta. E eu não queria ter que verificar em cada requisição se o usuário está autorizado ou não a acessar o recurso. O meu desejo era ter uma solução desacoplada.
Vamos estão ao código usado para autenticar:
public static void CreateTicket(string username, string host, string application, bool isPersistent, string userData, DateTime expiration)
{
FormsAuthentication.Initialize();
//
// Cria o ticket de autenticação
//
var ticket = new FormsAuthenticationTicket(1, username, DateTime.Now, expiration, isPersistent, userData);
//
// Criptografa o ticket
//
string hash = FormsAuthentication.Encrypt(ticket);
//
// Guarda o cookie no navegador de acordo com as opções do usuário
//
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);
cookie.Domain = host;
if (!string.IsNullOrEmpty(application))
{
cookie.Path = "/" + application + "/";
}
if (ticket.IsPersistent)
cookie.Expires = ticket.Expiration;
HttpContext.Current.Response.Cookies.Add(cookie);
}
Observe que eu defino no cookie as propriedades Domain e Path. E eu preciso definir essas propriedades para que o navegador não compartilhe o cookie com as aplicações que estão nas outras pastas.
O signout também tem as suas sutilezas, pois o método FormsAuthentication.Signout() não funciona nesses casos. Você precisa fazer um método assim:
private void Signout(string host, string application)
{
System.Web.HttpCookie cookie;
cookie = FormsAuthentication.GetAuthCookie(Thread.CurrentPrincipal.Identity.Name, false);
cookie.Domain = host;
if (!string.IsNullOrEmpty(application))
{
cookie.Path = "/" + application + "/";
}
cookie.Expires = DateTime.Now.AddDays(-1);
Response.AppendCookie(cookie);
}
Se você sentiu interesse em saber um pouco mais, visite o artigo Single Sign On across multiple ASP.NET applications no Developer Corner.
Postado em @
3/8/2010 1:58 PM
por
Ivan Paulovich
Uma amiga da Getsêmani participa de uma célula que está com um projeto interessante para o Dia das Mulheres. Trata-se de uma ação social na Vila Real I, uma comunidade carente aqui de Belo Horizonte.
O evento irá ocorrer no dia 14/03 e irá oferecer as mulheres da comunidade a oportunidade de conhecer o amor de Deus e palestras sobre higiene pessoal, sexualidade, valorização da mulher e valor da mulher para Deus.
E onde você entra nessa história? O projeto irá distribuir kits para as mulheres e você pode ajudar doando os seguintes itens:
- Pente
- Sabonete
- Escova de dentes
- Creme dental
- Desodorante
- Hidratante corporal
- Necéssaire
- Pacote de absorvente
O custo estimado de um kit é R$ 23,50 e serão distribuídos 60 kits. Você pode fazer as doações pessoalmente ou entrar em contato com a Sabrina no telefone (31) 8577-0317.
Se você tem dúvidas sobre o projeto que tal dar uma olhada no que fizemos no Natal do ano passado.
Postado em @
3/7/2010 2:13 PM
por
Ivan Paulovich
Imagine que você possui uma solução que contém várias aplicações web rodando no seu próprio domínio (www.clienteA.com.br ou www.clienteZ.org.br) e que precisam usar um único endereço para autenticação como login.dominio.com. A princípo os clientes precisam redirecionar seus clientes para login.dominio.com quando quiserem se autenticar e em seguida login.dominio.com leva os clientes de volta.
Mas há um pequeno problema no redirecionamento dos nossos clientes para a página de login quando usamos FormsAuthentication. A variável ReturnUrl que contém o endereço de retorno é montada relativamente ao cliente. E com isso não temos a informação para trazer o cliente de volta a url inicial.
A princípio não há uma propriedade no FormsAuthentication que defina que a variável ReturnUrl precisa ser montada com a URL completa. Mas não se desespere! Eu fiz uma busca por soluções a esse problema, e encontrei uma forma bastante simples.
Basta que você trate a variável ReturnUrl no evento Application_EndRequest. Abaixo o código que encontrei no blog do David Findley:
protected void Application_EndRequest(object sender, EventArgs e)
{
string redirectUrl = this.Response.RedirectLocation;
if (!string.IsNullOrEmpty(redirectUrl))
{
this.Response.RedirectLocation = Regex.Replace(redirectUrl,
"ReturnUrl=(?'url'.*)",
delegate(Match m)
{
string url = HttpUtility.UrlDecode(m.Groups["url"].Value);
Uri u = new Uri(this.Request.Url, url);
return string.Format("ReturnUrl={0}",
HttpUtility.UrlEncode(u.ToString()));
}, RegexOptions.Singleline |
RegexOptions.IgnoreCase |
RegexOptions.ExplicitCapture);
}
}
Com o código acima sua aplicação de login terá a url completa para enviar os usuários de volta.
Postado em @
3/7/2010 1:37 PM
por
Ivan Paulovich
A Copa de Talentos Microsoft será lançada em todo Brasil no dia 20 de Março. Será um concurso no formato do Win The 7 e o objetivo principal é a capacitação nos produtos e o engajamento da comunidade.
Em breve a Microsoft abrirá inscrições para o concurso mas como é uma competição técnica. Já vale começar a se preparar, que tal começar a se preparar?
Então acesse já o link para download do Training Kit do Visual Studio 2010 e do .NET Framework 4.0.
Postado em @
3/5/2010 9:48 AM
por
Ivan Paulovich
Pra quem sentiu falta da possibilidade de comentar no 100loop finalmente o alívio: os comentários foram reabilitados! Pra quem se interessar o motivo de eu ter removido o formulário é porquê estava dando um pequeno erro. E por falha minha, eu fui corrigir o erro mas acabou causando um erro maior.
E só agora tive uns minutos para concentrar nesse problema. Aliás, aproveitei pra mudar o tema do site. Espero que animem novamente a escrever por aqui.
Postado em @
3/4/2010 11:48 PM
por
Ivan Paulovich
Comecei um novo projeto open source no Codeplex. O projeto é uma iniciativa para atender a comunidade brasileira de desenvolvedores e entusiastas.
Brazil SubText se propõe a localizar o projeto SubText e realizar modificações para fornecer a comunidade brasileira uma ferramenta robusta em interatividade.
Optei por criar esse projeto Brazil SubText pois já uso o SubText no 100loop e gosto muito dessa ferramenta e paralelo a isso percebo uma necessidade dos desenvolvedores brasileiros em criarem blogs de seus grupos.
Abaixo um pequeno questionário o projeto.
- Por que mudar para o Codeplex? Por que já usamos o Codeplex há alguns anos e estamos mais familiarizados com a integração do Team Explorer.
- Vocês participam do projeto original no subtextproject.com? Participamos da lista de discussões e exporadicamente conversamos com alguém do projeto original.
- Por que localizar o sistema para o Brasil? Por que não há uma ferramenta tão flexível como o SubText que atenda o idioma português.
- Vocês pretendem modificar o Core do aplicativo? Se for necessário sim.
- Quem são vocês? Somos da comunidade brasileira de desenvolvedores.
Postado em @
3/2/2010 2:13 PM
por
Ivan Paulovich
Desde o surgimento da escrita o homem gera informação. A princípio o processo de criação da informação era demorado e desconectado entre comunidades de pessoas. Além disso os dados criados não possuiam segurança. A maioria estava literalmente ao léu.
Com o tempo e o crescimento tecnológico aprendemos a imprimir. E hoje nós podemos contar com as maravilhas de um bom livro. Essa nova tecnologia despertou no homem ainda mais a necessidade de gerar informações. E com isso milhões e milhões de títulos foram criados através dos séculos.
O mundo atual está cada vez mais buscando conhecimento e a mídia usada nos livros não permite uma consulta eficiente, é simplesmente limitada quando temos um catálogo um pouco maior.
Já no último século o homem passou a armazenar seus dados nos computadores, conseguindo assim ter mais conhecimento em um espaço muito menor e isso permitiu que ele gerasse mais e mais informações.
Eis, que surge o mesmo problema. Agora podemos criar uma enorme quantidade de informações e ainda estávamos desconectados uns dos outros.
Com o advento da internet passamos a colocar nossos dados na núvem, ganhamos com isso grande facilidade de compartilhar informações e podemos consumir os dados em diversos tipos de mídia. Agora temos que administrar tudo isso.
É aí que a Microsoft entra, que tal dar uma olhada em um vídeo sobre o SQL 2008 R2?
E agora, a informação da sua empresa caminha pra onde?
Postado em @
3/1/2010 8:52 AM
por
Ivan Paulovich
O novo Cara de TI não está mais ligado apenas as funções técnicas e funcionando apenas como um operador do sistema. O novo cara de TI precisa estar conectado com o négocio da empresa e o seu trabalho precisa refletir isso.
A Microsoft sabendo disso vem oferecendo cada vez mais produtos que nos permitem:
- Reduzir custos.
- Tornar a empresa mais eficiente.
- Ter tempo para pensar e agir.
Não dá mais para o profissional de TI ser lembrando apenas na administração contas dos usuários, recuperação de dados ou com a administração das contas de e-mail. O novo profissional não pode estar limitado a um conjunto tão pequeno e fechado de funções. Ele tem o potencial e precisa pensar.
O novo profissional precisa ter tempo para estar conectado na regra de negócio da empresa e acrescentar à empresa competitividade. Com isso ele consegue fazer o dinheiro girar e a economia crescer.
De brinde um video bem criativo:
Agora você precisa descobrir novas soluções que te permitam exercer o seu real potencial.
Postado em @
2/28/2010 7:40 PM
por
Ivan Paulovich