ASP.NET MVC 6 – Image Tag Helper

A forma que está sendo desenvolvida a nova versão do ASP.NET 5 está garantindo uma grande interação e feedback com os desenvolvedores, consequentemente uma significativa melhora em várias assuntos, desde o desenvolvimento independente de plataforma, até questões de design(de projeto) e melhorias de performance.

Falando em performance, segundo alguns estudos o front-end ainda é o responsável por 80% do tempo de carregamento de uma página, uma técnica bastante utilizada para melhorar esta performance é utilizar headers de expiração em arquivos (css, js, img’s e htmls) para que o navegador dos nossos clientes mantenham uma versão daquele recurso no cache (client), evitando assim que seja necessário realizar um outro download ou request para aquele arquivo. Porém ao utilizar esta técnica (cache client side) exige que implementemos maneiras de versionar nossos arquivos, para evitar aquela famosa frase (dá um control+f5).

Recentemente foi lançada uma versão beta do ASP.NET 5 Beta 5 e com ela uma novo Tag Helper que achei muito interessante, o Image Tag Helper, com ele é possível chamar uma imagem e automaticamente o ASP.NET MVC se encarregada de colocar um parâmetro de versionamento no src do html gerado pela tag . Continue reading

Túnel SSH com Git-Bash Windows e Linux

Diversas vezes temos que acessar algum serviço em um servidor em Linux por uma porta específica, que geralmente pode não estar exposta pela internet, a idéia deste post é mostrar como é possível criar um túnel utilizando SSH entre nosso computador e o servidor que queremos acessar.

No Windows vamos utilizar o Git-Bash como terminal para utilizar o SSH, ele pode ser baixado em: https://msysgit.github.io/, também poderíamos utilizar outro client, como por exemplo o http://www.putty.org/.

Criando o Túnel

Para criar o túnel podemos utilizar o seguinte comando SSH.

$ ssh -L localport:localipinserver:serverport user@serverip

ex

$ ssh -L 4321:127.0.0.1:27017 root@188.88.88.8 Continue reading

ASP.NET Web API: Configurando a serialização com JSON e XML

O ASP.NET Web API é um framework muito flexível e testável, falando em API’s existem diversas maneiras de empacotar e entregar as informações para os clientes que estão utilizando, recentemente tive que realizar algumas configuração de data e formatação de como os objetos seriam serializando. Pensando nisto, decidi escrever este post para mostrar algumas das possibilidades de configurações em como é feita a serialização e entrega pelas nossas WebAPI’s.

Continue reading

Hyper-V e CentOS (Linux): Expandindo um disco de uma máquina virtual em Linux

O Hyper-V é uma plataforma de virtualização muito completa e performática, com ela é possivel organizar nossas aplicações e máquinas virtuais de uma maneira para garantir o uso do hardware com uma maior densidade. Outra grande vantagem ao utilizar uma plataforma de virtualização é que ela serve de porta de entrada para outras tecnologias (como por exemplo servidores em Linux) pois a maquina virtual está em um ambiente controlado e de fácil monitoramento (para quem está acostumado a ambientes Windows).
Recentemente tive que fazer um upgrade de disco em uma infraestrutura de telefonia(VOIP) que executava em uma máquina virtual com CentOS (Linux) sobre a plataforma de virtualização do Hyper-V. Para isto funcionar, eu precisarei expandir o VHD (neste caso com a máquina virtual desligada) e, após isto, expandir e reorganizar a partição do Linux, no exemplo utilizei um outro S.O. (GPartedLive) para fazer o boot e editar a partição.

Continue reading

C# e a API do Simplify Commerce (MasterCard)

Recentemente participei de um hackathon da MasterCard (http://mastersofcode.com/) foi uma excelente experiência (recomendo participar). Além de todo o processo, e de virar a madrugada desenvolvendo \o/, conheci várias plataformas e API’s da MasterCard (https://developer.mastercard.com/portal/dashboard.action) porém a plataforma chamada Simplify Commerce foi uma das que mais se destacaram, ela oferece uma solução muito completa de processamento de cartões, com features como: criação de clientes, pagamento recorrentes, estorno e a transação do cartão em sí. Com ela desenvolvemos toda uma integração e a possibilidade de comprar produtos utilizando um app no celular, sem que nenhuma parte de nosso sistema tivesse que armazenar o cartão e em poucas horas.

A idéia deste post é mostrar um pouco quais os principais recursos da API do Simplify Commerce e além disto seu SDK em .NET. Lembrando que eu ainda não cheguei a utilizar ela em produção e que ela só está disponível no EUAs e Irlanda.

Simplify Commerce

Todo o cadastro e a documentação da Simplify Commerce está disponível em https://www.simplify.com/commerce/, para começar a utilizar como desenvolvedor é necessário fazer o cadastro, com isto teremos acesso as API’s Keys (em um ambiente de sandbox) e também ao dashboard da Simplify Commece.

Continue reading

Codificando Night Week: Performance Web com ASP.NET MVC

Performance é uma fator de sucesso ou fracasso para nossas aplicações, seja para melhorar a experiência do usuário ou para diminuir o uso de recursos computacionais ela é muito importante. Veja nesta apresentação os principais fatores e as principais técnicas para melhorar a performance de nossas aplicações web.

 

Evento: https://www.youtube.com/watch?v=TLHvLgdeF3w

Github:

https://github.com/rodolfofadino/DemoFrontEnd

https://github.com/rodolfofadino/DemoIISThread

Entity Framework, performance e uso de índices em cenários de grandes volumes

O Entity Framework é um ORM extremamente completo, que traz diversos recursos como: testabilidade, implementações assincronas(Await e Async), configurações baseada em codigo(code-based configuration), mapeamento para store-procedures, migrations e até interceptores e logs para as consultas.

Porém em cenários como quado configuramos o mapeamento do objeto manualmente, ou mesmo cenários em que o volume de dados ou requisições é grande, olhar e analisar a consulta que o Entity Framework gera é muito importante para indentificar possiveis gargalos ou melhorias. Tenho utilizado o EF com sucesso em várias aplicações, tive alguns problemas que foram gerados por como o banco estava estruturado e como eu fiz a configuração do mapeamento.

Neste post vou mostrar como é possivel analisar a consulta SQL que é gerada pelo EF,  mostrarei também um exemplo prático de como isto foi útil em um problema que tive.

Continue reading

ASP.NET MVC 6 – Inject (injetando um serviço em uma View)

Uma feature bem interessante do ASP.NET MVC 6 é que ele traz um container padrão para injeção de dependência(é possível alterar o container e configurar), entrarei em maiores detalhes sobre com funciona esta injeção de dependência em um próximo post. Neste post eu queria mostrar a possibilidade de injetar um serviço (uma classe) em uma View, e utilizar todos os recursos dela e do razor, incluindo async e await, para isto só precisaremos criar uma classe, registrar ela no injetor de dependência e utilizar um statement novo no razor, o “inject”  \o/

Continue reading

Dica: Criando um hotspot (wifi) no Windows

Diversas vezes, durante o desenvolvimento, precisamos acessar e debugar ou mesmo snifar as requisições web de nossos aplicativos mobiles. Recentemente tive que encontrar um problema em uma aplicação que não dispunha o código fonte. Para isto transformei o wifi do meu notebook em um hotspot, criando uma rede wifi e compartilhando a internet no meu notebook, e após isto utilizei o WireShark para olhar as requisições que estavam sendo realizadas.

A ideia deste post é mostrar como criar uma rede wifi a partir do seu notebook, criando um hotspot 🙂

Continue reading

ASP.NET MVC 6 – TagHelpers

O Razor trouxe uma sintax muito mais simples para se utilizar no desenvolvimento web, com ele deixamos de utilizar os “<% %>” que eram necessários na view engine .aspx (Web Forms). Porém ainda era necessário converter e mudar o html puro para utilizar alguns helpers como:

@Html.LabelFor(model => model.Nome, new { @class = "control-label col-md-2" })
e
@Html.EditorFor(model => model.Nome)

para renderizar coisas simples como:

<label class="control-label col-md-2" for="Nome">Nome</label>
e
<input class="text-box single-line" id="Nome" name="Nome" type="text" value="">

Continue reading

ASP.NET MVC 6 – Razor com suporte ao Async e Flush

O Razor é uma view engine extremamente poderosa, com uma sintax simples e limpa de utilizar. Entre as novidades do ASP.NET 5 estão varias melhorias desta view engine (lembrando que o Razor é uma view engine independente do ASP.NET MVC, sendo utilizada para varias outras coisas).

Entre os principais recursos novos estão o suporte ao Async e o Flush parcial da resposta do html para o usuário, a idéia deste post é mostrar um pouco como estão estas duas novas features.

Async e Razor

Uma grande mudança foi a implementação do suporte ao desenvolvimento assíncrono também no Razor, com isto, podemos utilizar métodos ou até a nossa Model com Async, isto pode parecer um pouco estranho para alguns padrões de projetos MVC, mas vale lembrar que além do MVC o Razor é utilizado em varias outras coisas como geração de html para emails, entre outros usos.

Com isto podemos por exemplo, que nossa ViewModel utilize Tasks em propriedades e somente no momento de utilizar estes dados na View utilizamos o Await.

Continue reading

ASP.NET MVC 6 – View Components

Um conceito novo que o ASP.NET MVC 6 traz é o View Components, cuja ideia principal é ser algo parecido com uma partial view, porém com muito mais recursos como testabilidade, isolamento de conceitos. Basicamente é possível fazer uma comparação como um mini controller, que é responsável pela renderização de um bloco só da pagina. Exemplos de uso: dados do usuário, menus customizados, informações de últimos produtos, promoções, algo que possua uma lógica e implementação um pouco mais complexa que uma Partial View.

A estrutura básica de um View Component é composta de uma classe (geralmente que herde de ViewComponent) e um arquivo Razor.

Classe

Uma classe de View Component pode ser criada e configurada das seguintes maneiras:

  • Herdando de ViewComponent
  • Decorando a classe com o atributo [ViewComponent], ou herdando de uma classe que tenha este atributo
  • Criando uma classe com o padrão de nome que termine com ViewComponent. Ex: UltimasNoticiasViewComponent

Continue reading

Visual Studio 2015: integração nativa com npm, Grunt e Bower

Ontem foi disponibilizado para download a nova versão do Visual Studio 2015 Preview, existem diversas novidades incríveis como: .NET Open Source, CrossPlataform e Visual Studio Community. Além de isto ser uma revolução no ecossistema de desenvolvimento web, o time responsável pelas “web tools” do Visual Studio também fez um excelente movimento, trazendo nativamente a integração com as ferramentas padrões de mercado para desenvolvimento web/frontend. A idéia deste post é mostrar um pouco como ficaram estas features, e se você é um desenvolvedor web, e ainda não conhece o npm (Node Package Manager), Grunt e Bower, corra atrás para aprender como elas funcionam, pois estas tecnologias já são o presente do mercado de desenvolvimento web.

Ferramentas envolvidas

image

  • node.js: plataforma JavaScript construída sobre o runtime do Chrome, tem como objetivo o rápido desenvolvimento, performance e escalabilidade.
  • npm (Node Package Manager): o npm é um gerenciado de pacotes, que utiliza o node.js como plataforma para execução, tanto o Bower quanto o Grunt utilizam ele para gerenciar os pacotes que eles instalarão
  • Bower: gerenciador de pacotes para web/frontend, como bibliotecas js e css, notem que o projeto default do ASP.NET MVC 6 deixará de utilizar o NuGet package para pacotes de frontend (jquery por exemplo)
  • Grunt: task runner baseado em JavaScript, é utilizado para automatizar rotinas como geração de .min e outras automatizações (também é possível utilizar o Gump)

Continue reading