GitHub: criando um Fork e enviando um Pull Request

Já pensou em contribuir com aquele projeto bacana opensource e deixar sua marca, mostrando que você é uma pessoa aberta a interagir com a comunidade de desenvolvimento? Pois bem, neste artigo vou mostrar como criar um fork de um repositório do GitHub, e depois enviar a contribuição para o autor aprovar. Para nosso exemplo vou usar o projeto Flunt do André Baltieri para sugerir uma alteração.

Primeiro, vamos no repositório do Flunt, no perfil do André, acessando https://github.com/andrebaltieri/Flunt, e então vamos clicar em fork, que irá criar uma cópia de todo o projeto em um repositório na minha conta.

Aguarde o processo terminar.

Agora eu tenho um cópia do projeto em um repositório próprio, onde posso fazer todas as alterações na branch master que eu quiser.

Antes de prosseguir, é preciso criar clone local, clicando em Clone or download, e copiando a URL.

Agora vamos criar um clone no meu computador, usando o comando do Git e para isso abra o Git Bash e cole o endereço, como o exemplo a seguir.

Obs.: Se você for repetir o tutorial, use seus dados de usuário do seu repositório.

Acesse a pasta e abra no Visual Studio o projeto, e abra a classe Notifiable.cs, e nela vamos alterar o trecho de código destacado da linha 12.

Onde temos a variável somente leitura de notifications:

Vamos alterar a declaração usando a sintaxe chamada expression-bodied property, como segue:

Agora vamos fazer upload da alteração via comando do Git, usando a sequência que segue.

Na tela a seguir é mostrado todos os comandos, desde o acesso à pasta até o envio do código.

Abra o o seu repositório pelo site do GitHub, no meu caso, acessando https://github.com/tiagopariz/flunt e clique em Pull requests, em seguida em create a pull request.

Em Comparing changes, clique em compare across forks e por fim clique em Create pull request.

Em Open a pull request, confira a descrição e adicione informações adicionais se assim for necessário, e finalmente clique em Create a pull request.

A alteração será enviado ao dono do repositório, com os detalhes do que irá mudar. 

Pronto, agora é só esperar a aprovação.

IIS: efetuando deploy no Windows 10 e IIS 10

Não é mais recomendado usar o protocolo FTP para transferência de arquivos por conta de suas vulnerabilidades, tão pouco para publicar aplicações que carregam consigo códígos e senhas altamente sensíveis. Então, a plataforma do Visual Studio e o IIS fornecem um meio muito mais rápido e seguro de subir publicações para aos ambientes de testes e produção chamado Web Deploy, neste artigo vou mostrar como configurar e publicar a um site a partir do Visual Studio 2017.

Web Platform Installer

Para facilitar a Instaleinstalação de ferramentas no IIS é preciso instalar a Web Platform Installer, para isso acesse o site https://www.microsoft.com/web/downloads/platform.aspx.

Clique em Install this extension e faça download do pacote para IIS.

Excute o instalador, e clique em I accept the terms in the License Agreement e em seguida em Install. Se o instalador pedir para executar como administrador, clique em Sim.

Aguarde o término da instalação e clique em Finish.

Agora no IIS, em gerenciamento, teremos a opção do Web Platform Installer.

Instale Web Deploy 3.6

Abra o IIS, e clique duas vezes em Web Platform Installer e pesquise por Web Deploy 3.6. Clique em Adicionar e então em Instalar.

Em Pré-Requisitos, clique em Aceito.

Aguarde o download e instalação.

Ao terminar a instalação, clique em Concluir.

Obs.: Talvez seja preciso verificar algumas coisas antes de publicar uma aplicação, segue uma lista de procedimentos que talvez sejam necessários:

  • Reiniciar os serviços do IIS,
  • Reiniciar o Site,
  • Reiniciar o Serviço de Gerenciamento da Web (wmsvc),
  • Desativar o Firewall ou liberar a porta 8172,
  • Fechar e abrir novamente a aba de Profile de publicação no Visual Studio.

Adicione o host deploy.sitelocal.com

Para facilitar o trabalho de depuração com a aplicação e simular um acesso direto pela internet, configure o host e adicione o site no IIS com a URL deploy.sitelocal.com seguindo este artigo.

Crie uma aplicação ASP.NET MVC

No Visual Studio, crie uma solução chamada DeploySite, e adicione um projeto do tipo ASP.NET Web Application chamado Deploy.Site. O nível de detalhes e complexidade não importa, pois só será preciso para publicação, eu criei um aplicação MVC e deixei pronta no GitHub, caso não queira nem se dar ao trabalho e só fazer um clone.

https://github.com/tiagopariz/DeploySite

Crie o perfil de publicação

Após criar e carregar a aplicação, vamos usar nosso servidor de deploy para subir nosso site. Para isso, clique com o botão direito sobre o projeto e clique com o esquerdo em Publish.

Em Pick a publish target, clique em IIS, FTP, etc e em seguida em Create Profile.

Preencha os campos de conexão, com os dados:

  • Server: O endereço do servidor de deploy, que pode não ser o mesmo do host, pois um servidor com IIS pode ter vários hosts, no nosso caso, é http://localhost.
  • Site name: o nome do site configurado no IIS, no caso deploy.sitelocal.com.
  • Destination URL: o endereço da Internet da aplicação que está sendo publicada, no nosso caso http://deploy.sitelocal.com, este endereço será aberto ao final da publicação.

Clique em Validate Connection para testar a configuração e se estiver tudo ok, clique em Next >.

Em Settings, selecione Release em Configuration e clique em Save.

Ao abrir a aba de publicação, clique em Rename Profile.

Digite o novo nome como DeployReleaseProfile e clique em Save.

Clique em Publish e visualize na janela Output os resultados.

Após a publicação, o site será aberto no navegador.

Dica: instale apenas o Web Deploy

É possível instalar no windows apenas o Web Deploy sem o Web Platform Installer, então para isso, entre no site https://www.iis.net/downloads/microsoft/web-deploy e faça o download do Web Deploy Installer.

IIS: adicionar endereços válidos locais para depuração

Muitas vezes, ao trabalhar com aplicações Web e/ou WebAPI, deparamos com limitações e dispositivos de segurança nos navegadores, pois eles exigem um endereço válido para comunicação, tanto entre APIs quanto para requisições Ajax. Geralmente, quando configuramos nosso IIS, o endereço default costuma ser:

http://localhost/nomeapp

Mas, este endereço é inválido para a segurança de uma aplicação web, principalmente para algumas chamadas AJAX, que procuram algo no padrão:

http://nomeapp.com ou http://nomeapp.dominio

Para contornar este problema é preciso editar o arquivo hosts (sem extensão mesmo) em C:\Windows\System32\drivers\etc, abrindo em um editor de texto. Inclua um formato de endereço válido seguindo o padrão nomedoapplocal.com, para todos os aplicativos necessários.

Obs.: Talvez seja preciso alterar as configurações de segurança da pasta C:\Windows\System32\drivers\etc, fornecendo acesso completo ao seu usuário.

Agora, é só usar estes endereços no seu IIS.

Jenkins: Instalar no Windows

Integração continua é uma necessidade neste novo mundo de mudanças constantes e metodologias ágeis com entregas constantes, e para isso temos muitas ferramentas, mas uma das mais populares é o Jenkins, que funciona para inúmeras plataformas e sistemas operacionais. Neste artigo vou ensinar como fazer uma instalação básica do Jenkins em um servidor Windows e deixá-lo pronto para publicar a partir de repositórios Git.

Baixe o Jenkins para Windows

Entre no site do Jenkins em jenkins.io, clique em Download.

E clique na versão para o Windows.

Descompacte o arquivo jenkins-(versão).zip e execute o instalador jenkins.msi e ao abrir a tela de bem-vindo, clique em Next.

Mantenha a pasta padrão de destino da instalação e clique em Next.

Em Ready to install, clique em Install.

Aguarde o processo de instalação, se for solicitado pelo Windows para executar como administrador, clique em Sim.

Após a conclusão, clique em Finish.

Configuração inicial do Jenkins

Após o térmno da instação, o endereço http://localhost:8080/ vai abrir no browser e então uma tela de desbloqueio do Jenkins será exibida, com o caminho da senha inicial.

Abra o arquivo initialAdminPassword no Bloco de Notas e copie a senha.

Digite a senha no campo Administrator password e clique em Continue. Em Customize Jenkins clique em Install suggested plugins, para que o Jenkins instale o plugins mais usados.

Aguarde o término das configurações iniciais e a instalação dos plugins.

Após a instalação dos plugins, será preciso criar o primeiro usuário administrador, para isso preencha o formulário em Create First Admin User e por fim clique em Save an Finish.

Após a conclusão, em Jenkins is ready!, clique em Start usign Jenkins.

Agora o jenkins está pronto para uso! O próximo passo é criar os Jobs e instalar os plugins adicionais.

Entity Framework: migrations com vários projetos e bancos de dados

Quando trabalhamos com soluções grandes, onde há vários projetos e cada um tem sua própria base de dados, assim como seu próprio versionamento usando Migrations do Entity Framework, fica meio complicado ficar alterando o Set as startup project e o Default Project na janela do Package Manager Console. Então, o ideal é apontar os projetos de configuração e dados na mesma linha de comando do Add-Migration e Update-Database.

Atualizando o banco de dados

Quando abrimos uma projeto que já tem migrations, precisamos atualizar o banco de dados, e para isso usamos o comando Update-Database. Mas podemos ser mais específico, e não precisar escolher nada em tela para que ele saiba onde achar a Connection String e Contexto, usando o comando abaixo.

Update-Database

Este comando atualiza o banco de dados com a ultima versão das migrations registradas, assim como roda algum Seed que pode popular tabelas.

-ProjectName

Nome do projeto onde está a configuração das entidades que representam os objetos do banco de dados, ou os DbSets.

-StartUpProjectName

O projeto que contém a Connection String para conexão com o banco de dados.

-ConfigurationTypeName

Nome completo, incluindo as namespaces, da entidade de configuração das migrations. Este arquivo é aquele que é gerado automaticamente ao usar o comando Enable-Migrations para ativar as migrações.

-Verbose

Este parâmetro exibe na tela todas as alterações efetuadas, assim como configurações definidas nos parâmetros anteriores.

Adicionando uma nova migração

Após atualizar o banco de dados, fazer as alterações nos objetos de domínio, precisamos adicionar a migração para depois enviar ao banco de dados as alterações versionadas, e novamente, é preciso que não precisemos definir o projeto de inicialização e dados. Para isso, use o comando a seguir:

Além dos parâmetros -ProjectName, -StartUpProjectName e -ConfigurationTypeName que já foram explicados no tópico anterior, precisamos incluir o parâmetro -Name e definir um nome que identifique qual alteração será feita no banco de dados.

Após adicionar a migration, só é preciso digitar o comando Update-Database com os parâmetros corretos.

Visual Studio: instalando o Report Designer na versão 2017

Diferente das versões anteriores, o Report Designer não vem embarcado no Microsoft Visual Studio 2017, para usar é preciso instalar uma extensão.

Abra o Visual Studio, clique no menu Tools e em seguida em Extension and Updates.

Em Extension and Updates, clique em Online, em Search digite rdlc, em Microsoft Rdlc Report Designer for Visual Studio clique em Download e aguarde a transferência.

Depois de transferido você será avisado que a instalação será completa somente após fechar e abrir novamente, portanto clique em Close e reinicie o programa.

Ao abrir novamente, a instalação da extensão será iniciada.

Clique em Modify e aguarde o término da instalação.

Se o instalador avisar que tem processos em execução que o impede de continuar, salve seus dados e clique em End Tasks.

Após liberar os recursos, a instalação prosseguirá normalmente.

Ao concluir, clique em Close.

Pronto, agora é só abrir o VS e editar visualmente os relatórios baseados em RDLC.

Até a próxima.

 

VB.NET MVC: traduzindo do C# as aulas do Cleyton Ferrari

Cleyton Ferrari foi um dos primeiros profissionais de desenvolvimento C# brasileiros que fez um curso bem estruturado sobre MVC e Entity Framework, explicando nos detalhes como funcionava cada elemento, e melhor, tudo gratuito no Youtube.

Na época eu trabalhava com VB.NET, e por isso eu precisei traduzir o projeto didático dele para a linguagem que eu usava. Foi uma tarefa com dois ganhos, o primeiro que serviu para eu treinar meu C# que ainda era bem básico e segundo para entender a fundo o conceito do MVC e ORM com Entity Framework.

Não havia me preocupado em criar um post em 2013, e mal sabia usar o GitHub, mas guardei os fontes lá, e eles existem até hoje, por isso resolvi escrever para registrar isso aqui. Mas antes de entrar no meu repositório você quiser conferir os cursos dele, que apesar de ser feito para o ASP.NET MVC 3 ainda é bem válido:

E acesse aqui os projetos traduzido para VB.NET:

https://github.com/tiagopariz/CleytonFerrari

 

Visual Studio: o desafio de hoje é recolher e estrutura da solução sem usar o mouse

Um tarefa muito comum no dia a dia de um programador que usa o Microsoft Visual Studio é recolher todos as pastas da solução para facilitar a navegação pelos arquivos e projetos.

O simples fato de recolher uma estrutura como esta:

Para deixá-la assim:

Sempre foi é preciso largar um pouco o teclado e usar o mouse para clicar no botão Collapse All, pois não há um atalho nativo na IDE, mas seu problemas acabaram! pois é possível configurar um novo atalho, então vamos ao trabalho.

Clique no menu Tools, em seguida em Options.

Em Options, expanda Enviroment e clique em Keyboard, e use Show commands containing para encontrar o comando SolutionExplorer.CollapseAll.

Em Use new shortcut in, selecione Global e em Press shortcut keys pressione a tecla / (barra) e por fim clique em OK.

O atalho ainda tem um problema, pois ele só funciona quando o foco está na janela da solução, mas para contornar isso foi vai ter que decorar as combinação de teclas que trás esta janela para o primeiro plano. Então, tecle CTRL + ALT + L e logo após /, e pronto a solução está recolhida!

Até a próxima.

OpenCover: analisando e automatizando a cobertura de código

Cobertura de código é essencial para sabermos o quanto estamos investindo na qualidade do nosso projeto. Para isso, até temos recursos nativos na IDE do Visual Studio, mas apenas na edição Enterprise. Mas nem tudo está perdido para quem não tem acesso à edições “premium” do VS! Podemos substituir tranquilamente pelo OpenCover, que atende a este necessidade com grande eficiência e elegância. E isso veremos no projeto de exemplo que iremos montar com o Visual Studio 2017 e o NUnit.

Observação: o OpenCover atende outras plataformas de testes, inclusive a nativa da Microsoft, irei o Usar o NUnit apenas por escolha própria, fique a vontade para integrar com a ferramente que convir.

Crie a solução dos projetos

Crie uma solução vazia chamada CodeCoverage, e inclua três Solution Folders chamadas Domain, Presentation e Tests. na pasta Tests, inclua mais duas subpastas chamadas Domain e Presentation, que serão os testes específicos de cada camada.

Projeto de domínio

Crie um projeto do tipo Class Library chamado CodeCoverage.Domain dentro da pasta Domain, e dentro do projeto inclua outra pasta chamada Entities. Nesta pasta inclua três classes chamadas State, City e Person, pois estas classes que serão analisadas pelo OpenCover, afim de gerar um relatório com o percentual de cobertura por testes unitários. A seguir o código de cada uma delas:

Classe de estados

Classe de cidades

Classe de pessoas

Projeto de Console

O projeto de console, será a nossa camada de apresentação, onde vamos trabalhar com DTOs, que são representações dos dados das nossas classes de domínio. Para isso, na pasta Presentation da solução, adicione um projeto do tipo Console Application chamado CodeCoverage.Prompt, e dentro do projeto inclua um pasta chamada Dto. Onde residirão as 3 classes de dados que serão a StateDto, CityDto e a PersonDto, como segue:

DTO de estado

DTO de cidades

DTO de pessoa

Edite a classe Program.cs e crie o método  que faz os mapeamento entre o Domínio e DTO e o código que exibe os dados em tela.

Observação: não é intenção deste artigo explicar como funciona processos de mapeamentos entre entidades de domínio, DTOs e ViewModels. Mas fica a dica para você procurar na internet qual o funcionamento de um AutoMapper, por exemplo.

Testes

Expanda a pasta de solução Tests e dentro da pasta Domain adicione um projeto do tipo Unit Test Project chamado CodeCoverage.Domain.Tests.

Neste projeto, inclua uma pasta chamada Entities, e dentro dela vamos incluir duas classes de testes, mas antes é preciso instalar o pacote NUnit, para isso abra o Package Manager Console selecione o projeto de testes do domínio e digite:

Adicione uma referência para o projeto de domínio, para que os testes possam acessar as entidades. Então adicione as classes de testes na pasta Entities.

Testes da classe de estado

Testes da classe de pessoa

Adicione um outro projeto do tipo Unit Test Project chamado CodeCoverage.Prompt.Tests e adicione uma referência do projeto CodeCoverage.Prompt e instale o pacote do NUnit também.

Crie uma pasta chamada Dto, e dentro dela inclua uma classe de testes chamada PersonDtoTests para pessoas.

Usando o Cake

Abra o Powershell, e se posicione na pasta da solução, e logo após digite o comando para instalar o pacote que compila e executa o script do Cake:

Ainda na pasta raiz da solução, crie um novo arquivo chamado build.cake e crie também a pasta docs/testsResults/Reports, que será onde ficará os resultados dos testes.

Dica: você pode adicionar o arquivo build.cake à solução, para que ele faça parte do projeto, mas é muito mais produtivo usar o Visual Studio Code e a extensão do Cake, conforme expliquei neste artigo.

Volte ao Powershell e digite o comando .\build.ps1 para executar o script do Cake.

Após a execução do script, o Report Generator irá compilar os arquivos xml do OpenCover e gerar uma visualização mais amigável e detalhada e ainda abrir um sumário no seu navegador padrão, incluind um histório de cobertura.

.gitignore

Se você está usando o arquivo .gitignore padrão do Visual Studio – aquele que é fornecido, por exemplo, pelo GitHub ou Visual Studio Online – será preciso alterar para que ele ignore os arquivos compilados do Cake e não suba para o repositório do GitHub. Para isso encontre o trecho a seguir:

E descomente as duas últimas linhas.

Pronto, agora podemos acompanhar a evolução dos testes de nosso aplicativo de forma elegante e segura.

Até a próxima e se quiser, acesse o projeto completo em meu GitHub:

https://github.com/tiagopariz/CodeCoverage

Cake: automatizando tarefas

O Cake é um automatizador de tarefas construído sobre o compilador do C# e de fácil configuração.

Instalando o Cake

Para usar o Cake, precisamos baixar os scripts de automação que vem todos em um arquivo chamado build.ps1 que roda no Powershell. Para isso, abra o Powershell, crie uma pasta chamada CakeAutomation.

Com a pasta criado, execute o comando para baixar o pacote com as configurações.

Pronto, o ambiente está configurado, agora precisamos de um projeto para automatizar.

Crie uma aplicação de exemplo

Eu tenho um post que ensina como criar uma aplicação console com o Visual Studio Code, vamos usar este exemplo para automatizar uma build:

Visual Studio Code: como criar uma aplicação console em C#

Crie o script de build da aplicação com o Cake

Na raiz do projeto, inclua uma arquivo chamado build.cake, que será onde residirá todo o código de automação. Edite o arquivo conforme segue:

Agora o script está pronto para ser rodado, para isso, é preciso que você esteja na raiz do projeto, via powershell digite o comando a seguir:

Site oficial

https://cakebuild.net/

Extensão para VS Code:

https://marketplace.visualstudio.com/items?itemName=cake-build.cake-vscode

Repositório no GitHub:

https://github.com/tiagopariz/CakeAutomation