Visual Studio Summit 2017

No último dia 03 de junho tive novamente a felicidade de ser palestrante do Visual Studio Summit em São Paulo, um evento incrível, com pessoas incríveis!

Agradeço ao Ramon e ao Davi pela oportunidade e principalmente a todos que assistiram as minhas duas palestras sobre C# 7.0, as duas salas estavam lotadas e a galera interagiu muito!

As fotos estão no meu facebook e as fotos do eventos estão aqui.

Para quem quiser saber um pouco mais sobre o C# 7, coloquei os slides no SlideShare e o código exemplo no meu GitHub.

Valeu galera e até a próxima,
Carlos dos Santos.

Assista ao Build 2017 – Keynote com legenda em português

O Build acontece nos dia 10 a 12 de maio de 2017, em Seattle: https://build.microsoft.com

Abaixo será transmitido o keynote na abertura do evento:

Aumente sua produtividade no Visual Studio 2017

Ola pessoal,

Veja aqui algumas dicas bem legais para configurar o Visual Studio 2017 e aumentar a sua produtividade?

Análise completa da solução – Mostra erros / avisos na lista de erros para toda a sua solução. No VS2015 Update 3 e VS2017 isso foi desativado por padrão, de modo que, por padrão, agora você só vê erros / avisos em seus arquivos abertos. Para ativar a Análise de solução completa, acesse Tools/Options/Text Editor/C#/Advanced/Enable Full Solution Analysis.
image

Lightweight Solution Load – ativa a carga rápida do projeto
image

Live Unit Test – Indica quais testes de unidade são impactados por qualquer uma das alterações de código e apenas executa novamente esse conjunto. Ele irá atualizar ícones no editor para que você saiba o status do seu código. Você também pode incluir/excluir testes específicos, projetos de teste ou classes. Você também pode executá-lo em "modo de economia de bateria", indo para Tools/Options/Live Unit Testing. Para ativá-lo, vá para Test/Live Unit Testing/Start. A janela Outupt também é um local útil para diagnosticar por que o Live Unit Testing não está sendo executado.
image

Sugerir usings para tipos no NuGet – Sugere a instalação de um pacote NuGet para resolver um tipo não reconhecido no editor (via lightbulb). Este recurso é off-by-default em ambos VS2015 Atualização 2+ e VS2017. Você pode ativá-lo em Tools/Options/Text Editor/C#/Advanced/Suggest usings for types in NuGet packages.
image

Sabe quando você precisa instalar um pacote por causa de uma referência ? Agora o VS vai te mostrar isto:
image

• Editar um arquivo EditorConfig para reforçar o estilo de código – você pode instalar a extensão de serviço de linguagem do EditorConfig para obter a conclusão do estilo de código do EditorConfig para .NET e uma experiência para adicionar um arquivo EditorConfig à sua solução ou projeto. Há também documentação aqui: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference
image

image

Code Suggestion – um novo conceito no VS2017 onde você pode sugerir práticas recomendadas ou dicas para desenvolvedores. Estes são simbolizados com pontos cinzentos sublinhando os dois primeiros caracteres de uma expressão. Acho essa cor muito fácil de ignorar, então você pode mudar a cor indo para Tools/Options;Environment/Font and Colors
image

Neste imagem os tres ponto em verde indicam a sugestão:
image
E quando clicamos no LightBuilb:
image

• Salvar resultados em Localizar todas as referências/Ir para implementação – você pode "bloquear" os resultados de pesquisa de uma pesquisa Localizar todas as referências ou Ir para a implementação pressionando o ícone "Manter resultados" na janela de resultados.
image

Consulta de sintaxe em Go to All  (Ctrl + T) – você pode pesquisar rapidamente por qualquer arquivo/tipo/membro/declaração de símbolo, prefaciando seu termo de pesquisa com ‘f’ para arquivo, ‘t’ para tipo, ‘M’ para membro ou ‘#’ para símbolo.
image

image

• Atalhos de teclado – se você estiver migrando para VS de IntelliJ, Eclipse, ReSharper, você provavelmente está acostumado a um certo conjunto de atalhos de teclado. Existe uma extensão para ajudar a redefinir as ligações de chaves para se adequar aos ambientes passados: https://marketplace.visualstudio.com/items?itemName=JustinClareburtMSFT.HotKeys2017-KeyboardShortcuts.

Mais dicas em: https://blogs.msdn.microsoft.com/visualstudio/2017/03/08/optimize-your-productivity-with-net-in-visual-studio-2017-2/.

Abraços e até a próxima!
Carlos dos Santos

Algumas dicas de DotNet Core com linha de comando

Olá pessoal,

Muita gente já está trabalhando com .Net Core e eu espero que você seja uma delas! Mas se não for, aproveite e já baixe o DotNetCore agora mesmo neste link.

Só para relembrar, o DotNet Core é uma nova versão da plataforma .Net que roda multi plataforma, ou seja, você pode desenvolver agora para Windows, Linux e Mac, usando o mesmo código fonte Smile

Existem muitas maneiras de se trabalhar com .Net Core, por exemplo usando o Visual Studio Code, Visual Studio 2015 e recentemente com o Visual Studio 2017, mas o divertido mesmo é trabalhar com o VS Code e a linha de comandos, então vamos lá!

Depois de instalar o DotNet Code, vamos abrir um prompt de comandos e começar a criar algumas coisas!

Vamos criar uma nova Solution usando o comando dotnet new sln

image

Agora temos uma nova solution, veja:

image

Agora vamos criar um projeto de Class Library com o comando dotnet new classlib –n classe –o classe

image

-n diz qual será o nome do nosso projeto e o –o é o diretório onde ele será criado

Veja como está ficando (estou usando o Visual Studio Code):

image

Agora vamos criar um projeto de testes com o comando dotnet new xunit –n testes –o testes

image

Agora temos uma solution com um projeto do tipo ClassLibrary e um projeto de testes com xUnit.

Vamos agora adicionar o projeto de classes como referência para o projeto de testes. Para isto vamos abrir o diretório do projeto de testes e digitar o comando: dotnet add reference add ..\classe.csproj

O comando add reference tem como argumento o arquivo de projeto que queremos referenciar, neste caso o projeto de Class Library.

image

Veja agora como ficou o arquivo csproj do teste:

image

Por fim, vamos adicionar os projetos a nossa Solution:

dotnet sln add classe\classe.csproj

dotnet sln add testes\testes.csproj

E o resultado final na nossa solution:

image

Agora é só codificar! Lembrando que tudo isto pode ser feito visualmente dentro do Visual Studio!

Abraços e até a próxima!
Carlos dos Santos.

Agora é multi plataforma!

Olá a todos,

Neste primeiro post de 2017 vou falar de algo que já está afetando a vida dos desenvolvedores: criar software multi plataforma! Há muito tempo se fala neste tipo de desenvolvimento e muito se prometeu com ferramentas e linguagens, algumas um tanto mirabolantes!

Me lembro de ter ido conhecer uma ferramenta Windows que havia sido portada para Linux e quando comecei a fazer perguntas sobre funcionalidades bem básicas a resposta foi:  “Bem, isto ainda não fizemos…”, e nem preciso dizer que instalar a tal ferramenta era coisa para alguns dias de muitos comandos em um sistema Linux. E o pior: nenhuma compatibilidade com o que já existia!

Muita coisa mudou deste então e muitas outras ferramentas e plataformas surgiram, algumas muito semelhantes a que descrevi e outras que nem existem mais!

Como desenvolvedores, e muitas vezes, empresários, é muito complicado ficar apostando em tecnologias que prometem muita coisa e que no final não entregam absolutamente nada!

Primeiro gostaria de falar com vocês sobre desenvolvimento mobile, então vamos imaginar um cenário em que você vai desenvolver uma app: primeiro você faz para Android, afinal é a plataforma líder, depois para iOS e talvez você pense no Windows Phone. Mas o grande problema sempre foi aproveitar o código, e isto nunca foi possível de verdade, porque cada plataforma tem uma linguagem e um jeito de fazer!

Eis que então temos algumas alternativas:

  • Apache Cordova, uma plataforma baseada em HTML+JS+CSS que promete entregar uma app em qualquer plataforma, e realmente ela consegue fazer isto de maneira muito satisfatória! O Visual Studio traz um conjunto de ferramentas para você trabalhar com Cordova que pode ser baixado neste link. Mas o problema é a performance, pois você está rodando uma aplicação com um browser embutido nela, um WebView, e isto pode te trazer alguns inconvenientes! 
  • Algumas outras ferramentas também surgiram com a promessa do desenvolvimento mobile multi plataforma, como: PhoneGap, MonoDroid e finalmente o Xamarin, que agora pertence a Microsoft.

Com Xamarin temos um desenvolvimento realmente muiti plataforma, com o mesmo código. Então podemos desenvolver em C# para Android, iOS e Windows Phone, usando uma única linguagem para todas as plataformas, desenvolvendo somente uma vez!

Mas alguns podem dizer, eu não gosto de Windows, eu uso Linux, uso Mac! E aí que vem a beleza da ferramenta, pois existem versões para Windows, Linux e Mac, usando o Xamarin Studio e mais recentemente o Visual Studio for Mac. Se você estiver a fim de aprender mais sobre Xamarin, recomendo o Monkey Nights, que é um hub de conteúdo sobre Xamarin!

Muito bem, mas o mundo não é so desenvolvimento Mobile, temos também Desktop e Web, como fica isto no mundo multi plataforma ?

Se você é um desenvolvedor Asp.Net e trabalha com C#, a boa notícia é que agora podemos desenvolver uma aplicação que roda no Windows (IIS) e no Linux (com diversos servidores web) e isto traz, uma quebra de paradigma para desenvolvedores acostumados com o mundo Windows: a famigerada LINHA DE COMANDO, isto mesmo, você terá que digitar muito comando e não pense que isto é ruim não! Veja, eu gosto muito da IDE do Visual Studio, acho realmente muito produtiva, talvez a mais produtiva do mercado, mas quando eu trabalho com projetos no Git, eu prefiro usar a linha de comando, sabe por quê, simples: eu tenho mais controle sobre o que está acontecendo e talvez a IDE ainda não tenha todos os comandos que eu preciso…

Entâo caro amigo desenvolvedor, se acostume a ver as telas abaixo:

image

SNAGHTML37ff22fb

Esta segunda tela é um terminal Linux para um servidor da empresa. E isto é bem interessante, já que até algum tempo atráz tudo era somente Windows, e agora temos um SQL Server rodando no Linux. Então tem dias que eu trabalho mais no Linux que no Windows!

Mas por quê eu estou usando Linux afinal de contas ? Simples, por quê eu estou desenvolvendo para web multi plataforma usando Asp.Net Core, estou usando C# e criando ferramentas que podem ser hopedadas em Windows ou Linux.

Então vamos ao contexto: a Microsoft vem trabalhando em uma nova versão do Asp.Net, que foi totalmente reescrito, que roda muito mais rapido que o atual e principalmente, é totalmente multi plataforma: Windows, Linux e Mac.

Mas não precisa arrancar todos os cabelos por causa do terminal do Linux, pois o Visual Studio 2015 já trabalha com Asp.Net Core, basta instalar as ferramentas deste link. E se você gosta de coisas novas, assim como eu, também pode usar o Visual Studio 2017 RC, lembrando que ainda está em beta.

Temos também uma ferramenta fantástica e multi plataforma, chamada Visual Studio Code, e esta ferramenta já é uma das mais utilizadas para desenvolvimento Javascript, pois é muito simples de trabalhar e conta com centenas de plugins que permitem a ela trabalhar com diversas linguagens! Eu já trabalhei com Arduino e Java no VS Code, veja alguns exemplos de linguagens:

image

Bom, eu falei tudo isto para enfatizar que existe uma nova Microsoft, que trabalha com Open Source (veja meus slides aqui) e que já é muiti plataforma, pois até Linux já existe dentro do seu Windows 10, se não acredita, veja este post aqui.

Então meu amigo desenvolvedor, é hora de quebrar paradigmas, de estudar Linux, de pensar diferente, pois o mundo é multi plataforma! Trabalhar com Windows, Linux, Mac, Visual Studio, VS Code, é o nosso dia a dia!!!

E viva a diversidade!

Abraços e até a próxima!
Carlos dos Santos.

Criando Recursos no Azure com a FluentAPI em C#

Fala pessoal, tudo bem?

Ontem (12/10) foi publicado o preview do Azure FluentAPI, que permite a criação de vários recursos do Azure, como VMs, Storage e muito mais, diretamente do .Net usando Fluent.

A grande novidade aqui, além do Fluent é a compatililidade com o .Net Core, isto mesmo, você pode criar código para gerenciar seu Azure totalmente portável!

Veja um exemplo de como criar uma VM:

create-vm

E neste link existe alguns outros exemplos e também como usar a Fluent API.

Lembrando que o projeto é totalmente open source e está no GitHub.

Enjoy!!!
Carlos dos Santos.

Microsoft Open Source

Na última quinta-feira (22/09) estive em Ilha Solteira/SP na Unesp falando sobre Microsoft Open Source para o pessoal de Engenharia Elétrica. Valeu pessoal, a papo foi muito legal.

Nâo sei se todos sabem, mas existe muito código fonte sendo compartilhado pela Microsoft no GitHub, veja: https://github.com/microsoft. Mais interessante ainda é abrir um Linux dentro do Windows 10, quem diria! Eu fiz um outro post sobre isto.

Recentemente também a Microsoft ficou em primeiro lugar no ranking de empresas que colaboram no GitHub:

image

E para você que ainda está incrédulo, aqui estão os PPTs da minha palestra. E as fotos da minha visita aqui no facebook.

Abraços e até a próxima,
Carlos dos Santos.

C# 7.0–Tuples

Olá pessoal,

Há algum tempo atrás eu publiquei um post falando sobre Tuples em C#, que é um recurso bem interessante para retorno de múltiplos valores, principalmente quando você não quer criar uma classe somente para isto.

Agora com o C# 7.0 (ainda em preview) as Tuplas ganharam novos recurso que facilitam ainda mais a sua utilização, agora podemos dar nomes aos elementos, faclitando ainda mais o nosso código.

Para executarmos os exemplos você vai precisar baixar o Visual Studio “15” Preview 4. Atenção: se você ja tiver uma versão anterior deste Visual Studio, precisará removê-la antes de instalar o Preview 4.

O preview 4 é uma nova IDE, com novos recursos e um novo modelo de instalação, veja:

image

Você pode escolher o que achar interessante e depois clicar em “Install”. Esta instalação nos dá uma idéia do que esrá por vir, um modelo bem mais intuitivo de setup.

Depois de instalado o Visual Studio “15” Preview, vamos criar um projeto Console:

image

Inicialmente vou mostrar como estâo as tuplas hoje. Para isto vou criar um método que retorna vários parâmetros:

   1: class Program

   2: {

   3:    static void Main(string[] args)

   4:    {

   5:       var ret = BuscaNomeLimite(1);

   6:       Console.WriteLine($"Nome: {ret.Item1} - Limite: {ret.Item2}");

   7:    }

   8:  

   9:    static Tuple<string,decimal> BuscaNomeLimite(int ID)

  10:    {

  11:       return new Tuple<string, decimal>("Carlos",1000);

  12:    }

  13: }

Isto já facilita muito o desenvolvimento, principalmente quando você não quer criar uma classe para fazer isto, mas ao mesmo tempo gera um código um tanto confuso, pois os parâmetros sâo nomeados como Item1, Item2, etc.

Agora vamos ao C# 7 e ver como isto melhorou, e muito!!! Entâo vamos fazer um upgrade no nosso método usando a sintaxe nova, mas como ainda estamos em Preview, é necessário instalar o pacote System.ValueTuple usando o Nuget. Para isto clique com o botão direto no seu projeto e selecione “Manage Nuget Packages”, depois marque a opção “Include prerelease” e depois digite “tuple” na caixa de pesquisa:

image

Clique no botão Install e siga os passos! Pronto, agora vamos melhorar nosso código:

   1: static void Main(string[] args)

   2: {

   3:    var ret = BuscaNomeLimite(1);

   4:    Console.WriteLine($"Nome: {ret.nome} - Limite: {ret.limite}");

   5: }

   6:  

   7: static (string nome, decimal limite) BuscaNomeLimite(int ID)

   8: {

   9:    return ("Carlos", 1000);

  10: }

Veja que com a nova sintaxe, você pode nomear os campos da Tupla, ou seja, pode usar nomes mais intuitivos e a sintaxe é bem simples. Basicamente você coloca os nomes e tipos entre parênteses, no mesmo local onde antes estava a Tuple<>:

image

E no retorno você coloca os valores, também entre parênteses, na mesma sequência da definição do médodo:

image

Você pode também nomear os parâmetros no retorno, para isto basta colocar o nome do parâmetro e dois pontos, seguido do valor de retorno:

image

Tuplas são um recurso muito legal do C#, e agora, com a nomeção dos campos, seu código vai ficar ainda mais simples de ser entendido!

Abraços e até a próxima!

Carlos dos Santos.

Tem um Linux no meu Windows 10!

Fala pessoal,

É isto mesmo que você leu, tem um Linux dentro do Window 10, e não é uma máquina virtual, como muitos estão pensando, é um sub-sistema baseado no Ubuntu.

Se alguém falasse isto há alguns anos atrás, eu provevalmente diria que é loucura, mas o mundo mudou e a Microsoft também. Nós últimos anos a Microsoft vem trabalhando mais fortemente com comunidades open source, e o Linux é uma delas.

Em um mundo voltado para nuvem, não faz mais sentido a Microsoft focar somente no Windows e prova disto é que o Linux é muito utilizado nas máquinas virtuais do Azure, isto mesmo, na nuvem Microsoft, existe Linux.

Noticias como a “Microsoft Ama o Linux”:

image

E o “SQL Server Ama o Linux”:

image

Talvez soem um tanto estranho para quem utiliza somente o Windows no dia a dia, mas como eu disse antes, o mundo está mudando e principalmente, está se tornando multi plataforma  “de verdade”. De verdade, quero dizer que você consegue construir um software realmente multiplataforma, onde o mesmo código roda, por exemplo, no Windows, Linux e Mac. Isto pode ser feito com o .Net Core/Asp.Net Core e Xamarin, só para citar alguns exemplos.

Mas voltando ao título do artigo, como assim tem um Linux dentro do meu Windows ? Simples, meu caro leitor, a Microsoft colocou um sistema Linux junto com o seu Windows 10, não uma máquina virtual, mas um sistema nativo Linux, baseado no Ubuntu.

O que vamos mostrar agora vale para quem já instalou a versão de aniversário do Windows 10 ou está no Programa Insiders.

Então vamos lá:  para instalar o Linux no seu Windows, abra o “Painel de Controle” e vá em Programas, e depois em “Ativar ou Desativar Rescursos do Windows”:

image

Agora selecione a opção “Windows Subsystem for Linux”:

image

Clique em OK para instalar! Provavelmente você terá que reiniciar a máquina!

Depois de instalado, você abre o Prompt de Comandos e digita “bash”:

image

Agora a mágica acontece, você está de fato em um Linux, mas compartilhando os seus discos e pastas, veja por exemplo o comando ls:

image

Vamos ver a versão do Linux, usando o comando “lsb_release –a”:

image

Vamos por exemplo instalar o editor de textos nano. Assim como no Ubuntu Linux, vamos usar o comando apt-get:

apt-get update
apt-get install nano

Mas antes de criar um arquivo e mostar no windows, vou mudar de diretório no Linux. Veja que estamos em /mnt/c e agora vou para o meu Temp:

cd /mnt/c/Temp

nano teste.txt

image

Agora vamos salvar o arquivo e verificar no Windows:

image

O sub-sistema ainda está em beta, mas muitos programas linux funcionam e muitos mais irão funcionar em novas versões, isto é só o começo de uma grande resolução e eu espero que você fique antenado nas mudanças!

Abraços e até a próxima,
Carlos dos Santos.

Serializando JSon com JIL

Fala pessoal, tudo bem!

Hoje vou falar sobre uma biblioteca muito legal para serializar e deserializar objetos Json, pois este tipo de dados está cada vez mais comum com o advento das APIs web.

Um exemplo de dado em Json é o próprio WebAPI que faz parte do Asp.Net MVC, pois ele retorna basicamente dados em Json. Então qual o problema a ser resolvido ?

Você recebe um dado em Json, que é basicamente um texto, e precisa manipular seu conteúdo através de uma classe! E é aí que entra o JIL !!!

A biblioteca JIL, criada pela equipe do site StackExchange desempenha este trabalho com muita rapidez e simplicidade! Esta biblioteca está disponível através do NuGet.

Vamos codificar para ver!

Vou criar um projeto bem simples do tipo Console Application no Visual Studio 2015, mas você pode usar outras versões do Visual Studio também:

image_thumb1

E vamos instalar o JIL usando o NuGet Package Manager Console (Tools/NuGet Packager Manager/Packager Manager Console):

image_thumb3

Vamos agora criar um classe e trabalhar com a serialização e deserialização:

   1: public class Cliente

   2: {

   3:         public int ID { get; set; }

   4:         public string Nome { get; set; }

   5:         public string Cidade { get; set; }

   6: }

Agora vamos trabalhar com o JIL, veja como é simples:

Vamos criar um objeto do tipo cliente e serializar:

   1: var cli = new Cliente() { ID = 1, Nome = "Carlos", Cidade = "CPP" };

   2:  

   3: var json = JSON.Serialize<Cliente>(cli);

   4:  

   5: Console.WriteLine(json);

Criamos o objeto e passamos como parâmetro para a classe JSON.Serialize()

O retorno é este:

image

Agora vamos fazer o inverso, pegar uma string Json e converter para um objeto:

   1: var jsonData = "{\"ID\":1,\"Nome\":\"João\",\"Cidade\":\"SP\"}";

   2: var cliente = JSON.Deserialize<Cliente>(jsonData);

   3:  

   4: Console.WriteLine("ID: {0}\nNome: {1}\nCidade: {2}\n", cliente.ID, cliente.Nome, cliente.Cidade);

Temos o dado jsonData, que poderia ter vindo de qualquer serviço na web, e depois chamamos o método JSON.Deserialize(). Pronto, temos nosso objeto cliente!

Veja o retorno:

image

Veja o código todo aqui:

   1: using Jil;

   2: using System;

   3:  

   4: namespace ConsoleApplication2

   5: {

   6:     class Program

   7:     {

   8:         static void Main(string[] args)

   9:         {

  10:             var cli = new Cliente() { ID = 1, Nome = "Carlos", Cidade = "CPP" };

  11:             var json = JSON.Serialize<Cliente>(cli);

  12:             Console.WriteLine(json);

  13:  

  14:             var jsonData = "{\"ID\":1,\"Nome\":\"João\",\"Cidade\":\"SP\"}";

  15:             var cliente = JSON.Deserialize<Cliente>(jsonData);

  16:  

  17:             Console.WriteLine("ID: {0}\nNome: {1}\nCidade: {2}\n", cliente.ID, cliente.Nome, cliente.Cidade);

  18:  

  19:  

  20:         }

  21:     }

  22:  

  23:     public class Cliente

  24:     {

  25:         public int ID { get; set; }

  26:         public string Nome { get; set; }

  27:         public string Cidade { get; set; }

  28:     }

  29: }


Abraços e até a próxima,

Carlos dos Santos.