The everyday adventures and discoveries of a software development engineer.

Configurando Jenkins para .NET

O que é o Jenkins? Jenkins é um sistema de integração continua (continuous integration) e entrega continua (continuous delivery) utilizado para automação de builds, relatórios de erros, execução automatizada de testes unitários, deploy automático, e muito mais. Por que o Jenkins? Existem alguns motivos para escolher o Jenkins como seu servidor de CI ao invés de outras alternativas do mercado: Completamente gratuito. Instalação e configuração simples. Extensível e customizável Existe um plugin para quase tudo que você precisar / imaginar. E caso não exista um plugin, é relativamente simples desenvolver o seu próprio. Instalando e configurando Instalar e configurar o Jenkins

Criando um converter de máscara de telefones genérico

Sempre que usamos dados de serviços externos ao nosso app, precisamos nos prevenir quanto a qualidade desses dados. No caso geral, nunca devemos confiar nos dados. Nunca confie nos dados! Um dado que geralmente não damos muita importância é o "número de telefone", no entanto o mesmo número de telefone pode ter diversas variações: +55 11 99999 1234 55 11 99999 1234 11 99999 1234 0xx11 99999 1234 99999 1234 +55 11 9999 1234 55 11 9999 1234 11 9999 1234 0xx11 9999 1234 9999 1234 Veja que eu ainda considerei alguns números de celular que não contém

Parse de JSON usando Dynamic no WinRT

Eu estava trabalhando em uma funcionalidade de um app em que era necessário desserializar um json e utilizar seus dados para processamento. Como era uma estrutura pequena e sem grande impacto optei por fazer uma desserialização para um dynamic type que “em teoria” é tão simples quanto: string content = @"{""FullName"" : ""Nikola Tesla"", ""Phone"" : ""5511999999999"" , ""Email"" : ""ntesla@test.com"" }"; dynamic userInfo = JObject.Parse(content); var _name = userInfo.FullName; var _phone = userInfo.Phone; var _email = userInfo.

Processamento paralelo e assíncrono com Tasks

Quando desenvolvemos para dispositivos móveis temos acesso, geralmente, a um subset do framework, deixando algumas implementações bastante limitadas. No caso do Windows Phone 8.1 não há acesso às bibliotecas de paralelismo disponibilizadas no .NET, então, qual a melhor alternativa? Usar a classe Task. Dentro da classe Task temos 2 funções que servem bem para o proposito de paralelismo: Task.WhenAll Task.WhenAny Como exemplo vamos obter a partir de uma lista de strings suas respectivas representações em formato base64. No meio do método faremos um Task.Delay(2500) de forma que o método demore “pelo menos” 2,5s para

Criando contatos no Windows Phone 8.1

Alguns dias atrás estava trabalhando em um projeto cujo aplicativo precisava obter e gravar dados de contato na base de dados do app de contatos do Windows Phone. Quanto a buscar os dados, é relativamente simples: var contatos = ContactManager.RequestStoreAsync(); Teoricamente o codigo abaixo deveria abrir a tela de contatos do Windows Phone com um ContactCard vazio para o usuário preencher.. mas... ContactManager.ShowContactCard(new Contact(), new Rect()); Infelizmente para adicionar um contato não é tão simples assim no WP8.1. Quando chamamos os métodos que deveriam adicionar contatos ou acionar a tela do próprio WP para adicionar um novo