terça-feira, 31 de janeiro de 2017

Adicionar intellisense no VS Code para o angular


Para adicionar intellisense ou autocomplete do Angular.js no VS Code deve-se:
  1. Criar o jsconfig.json e package.json na raiz do projeto se não existir
  2. Instalar o Typings conforme abaixo:
    npm install typings –-global
  3. Pegar os arquivos typings do repositorio Definitely Type
    typings install dt~angular –-save
  4. Reinicie o VS Code
  5. Será criado o arquivo typings.json e o diretório typings com as informações de auto complete
image
O mesmo procedimento é possível de ser utilizado para outros pacotes, como react. Para descobrir os nomes dos pacotes disponíveis basta executar o comando
typings search --name react
E substituir o passo 3 pelo pacote desejado:
typings install dt~react –-save

Referências:
Getting Angular Intellisense in Visual Studio Code do Laurent Duveau, que tem alguns comandos desatualizados, mas tem a lógica de passos completas.
Resposta do “How to set intellisense for Angular.Js and Javascript in Visual Studio Code”  no Stack overflow
https://github.com/typings/typings
http://definitelytyped.org/

segunda-feira, 30 de janeiro de 2017

Maratona Xamarin

 

A Microsoft começou uma maratona do Xamarin com certificação ao final em 30/1. As inscrições podem ser feitas no:

https://aka.ms/maratonaxamarin

Haverá post do que será passado em cada novo módulo, que é lançado por semana:

  • Semana 01: Introdução ao desenvolvimento mobile
  • Semana 02: Xamarin.Android
  • Semana 03: Xamarin.iOS
  • Semana 04: Xamarin Forms
  • Semana 05: Serviços de nuvem para seu aplicativo com Xamarin
  • Semana 06: Desenvolvimento do aplicativo
  • Semana 07: Desenvolvimento do aplicativo

Caso tenha pedido as inscrições, também é possível fazer um curso na universidade Xamarin com 30 dias grátis:

https://university.xamarin.com/self-guided

domingo, 29 de janeiro de 2017

Impressões iniciais do Node.js por quem é do mundo .Net

Vou fazer uma análise do Node.js com a visão de quem é do mundo .net e gosta de aprender novas linguagens, tecnologias etc.
É muito bom termos diferentes empresas e pessoas investindo em diferentes ideias - isto traz evolução e facilidades, e quem ganha é o desenvolvedor que gosta de se atualizar.

Antes de falar de Node.js, segue uma breve contextualização histórica do Asp, conforme minha visão (E você entenderá a importância de conhecer o Node.js também para o uso em server) :
  • o Asp antigo tinha como fundamento script server que misturava html e javascript  no mesmo arquivo, como o PHP da época. Este foi completamente substituído pelo Asp.net;
  • o Asp.net Webforms foi uma tentativa de facilitar a entrada de desenvolvedores .net Windows Forms para aplicações Web. Principalmente por abstrair o html com um desenvolvimento RAD. A Microsoft ainda mantém estas bibliotecas, mas não deverá evoluí-las, pois já fez as duas evoluções abaixo
  • o Asp.net MVC foi uma resposta necessária a quem gostaria de desenvolver utilizando o MVC (padrão muito interessante), como no struts do Java e no Ruby on Rails. Também foi a primeira iniciativa de ser open source, conforme o post do ScottGu ASP.NET MVC, Web API, Razor and Open Source
    • Houve facilidades para desenvolvimento colaborativo com o uso do Nuget (que permitiu atualizações mais rápidas, necessárias para não esperar a framework e utilização de pacotes de terceiros).
    • Um segundo passo foi dado em 2014 quando direcionou o uso do Nuget para pacotes exclusivos .net e sugeriu o padrão de comunidade para task runners e front end, como cheguei a comentar no post Gulp, Grunt, Bower e npm no Visual Studio (Aqui já começa um pouco da parceria com o Node.js e porque deveríamos conhecer este ambiente javascript)
  • Agora, o Asp.net Core olhou para a simplicidade, leveza, escalabilidade e desempenho do Node.js que está sendo amplamente utilizado também do lado server. Para superar o Node.js o trabalho não foi pequeno, demandando uma framework completamente nova e enxuta. O post "Como está a preocupação do ASPNET 5(Core) em relação a desempenho?" chegou a comentar as iniciativas em andamento na época

Quem é este tal de Node.js?

No site oficial é explicado conforme abaixo:
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world.
Node.js é um runtime javascript construído em cima do engine Javascript do Chrome V8. Node.js usa uma orientação a evento, modelo I/O não bloqueante que o faz eficiente e leve. O ecossistema de pacotes do Node.js, npm, é o maior ecossistema de bibliotecas de código aberto do mundo.
(Tradução livre)

Fontes para conhecer e entender

O título deste post é sobre impressões porque toda a comparação foi feita com estudos introdutórios, uso de pacotes do Gulp (algumas análises de erros nestes pacotes e estudo dos fontes abaixo para um embasamento teórico maior):



Por que usar o Node.js?

O post Top 10 Reasons To Use Node.js destaca bons motivos práticos e aproveitarei para tirar  alguns aprendizados para pensarmos no mundo .net e .net core. Reforço que não tenho experiência prática com uso do Node.js além dos pacotes de task runner, por isso estou baseando na experiência do post.

1. Conhecimento do Javascript

No desenvolvimento Web com certeza você utiliza o Javascript no cliente e poderia utilizar este conhecimento no server. Fácil de aprender, parece com Java, C# e se você trabalha com Web, já utiliza no lado cliente há anos.
Com o uso de Typescript ainda é possível trazer checagem de tipo estática e últimas funcionalidades do ECMAScript.  A compatibilidade com navegadores é total, já que transpila para Javascript normal.

2. É rápido

Utiliza o engine v8 desenvolvido pelo Google para uso no Chrome e compila o javascript em código de máquina nativo. Ainda tem o “event loop”, que processa todas operções de I/O em uma única thread, de forma assíncrona.
O Node.js é assíncrono por padrão em operações de I/O e isto orienta o desenvolvimento de maneira mais escalável e com maior desempenho. No artigo How To: Scale .NET Applications, bem antigo da Microsoft, esta ideia já é compartilhada e incentivada:
If your application contains tasks that can be performed simultaneously and independently of one another and the application runs on a single processor server, you should asynchronously execute the tasks. Asynchronous processing is more beneficial for I/O bound tasks and is less beneficial when the tasks are CPU bound and restricted to a single processor
Se sua aplicação contém tarefas que podem ser executadas simultaneamente e independentemente uma das outras e a aplicação executa em um servidor de processador  único, você deve executar as tarefas assincronamente. Processamento assíncrono é mais benéfico para tarefas ligadas a I/O e menos benéfico quando as tarefas são ligadas ao CPU e restritas ao processador único.
(Tradução livre)

3. Ferramentas

Há várias ferramentas para ajudar no ambiente. Npm que é o gerenciador de pacote muito bom e facilita muito a vida do desenvolvedor – rápido, robusto, consistente, ajudando inclusive a resolver dependências entre diferentes versões. Até ele tem concorrente, que é o Yarn feito pelo facebook.
Todo o ambiente de Task Runner com o uso do Gulp, Grunt e Bower também.

4. Você já sabe javascript, novamente

É possível expandir a utilização do javascript no client, server e banco de dados em bancos documentais que salvam JSON como o MongoDB – na verdade este armazendo um BSON.

5. Real-time de forma fácil

Node.js supera em conexões simultâneas e também no uso do protocolo websockets, que é uma conexão de duas vias entre o cliente e servidor.
Na rodada 13 de testes do techempower foi a estreia do asp.net core que bateu o Node.js no cenário de plaintext pela primeira vez. Foram 1,822,366 requisições por segundo do asp.net contra 467,246 do Node.js.
o cenário de Json o Node continuou ganhando, fazendo 304,372 requisições por segundo contra 264,649 do asp.net core. Vamos esperar a rodada 14 para mais evoluções e dessa disputa que quem ganha são os desenvolvedores.

6. Streaming de dados

Node pode fazer stream para websockets e ler e escrever para http, fazendo um pipe.

7. Uma base de código rodando no client e server

Neste tópico é citado da framework Meteor, que no post é citado da seguinte maneira:
Meteor is a next-generation web framework built atop Node. It runs the same codebase on the both the client and server. This allows you to write client code that saves directly to a database. Then, that data is automatically persisted to the server. It works the other way too!
Meteor é uma framework web de próxima geração contruída em cima do Node. Ele roda a mesma base de código no cliente e servidor. Isto permite que você escreva código cliente que salve diretamente na base de dados. Então, o dados é automaticamente persitido noservidor. Ele funciona no outro caminho também!
Não tenho conhecimento para comentar sobre o Meteor

8. Mantenedor corporativo

O risco de trabalhar com qualquer projeto código aberto é ele ser abandonado por seus mantenedores voluntários. O Node é mantido pela Joyent e utilizado por grandes empresas.

9. Hosting

Há opções de host de PaaS (Product as a service) como o Modulus. Também o Heroku.
O docker também é um facilitador para ambiente e host para Node e para asp.net core.

10. Todo desenvolvedor sabe (um pouco de) javascript

Já foi dito na vantagem 1 e 4 e o post repetiu na 10: achar desenvolvedores com conhecimento é sempre difícil, então pelo javascript ser tão utilizado, facilita este processo de encontrar profissionais ou até forma-los.

Acrescendo outros que percebi

Facilidade de instalação e execução

 

Facilidade de executar programas, podendo escrever um simples arquivo texto que não precisa compilar ou até passar uma simples linha de comando com a string do código a ser executado com após o argumento -pe (Veja aqui todas as opçoes de argumentos), como exemplo:
node -pe "require('url').parse('/test?q=1', true)"
O .net core introduziou também um CLI para competir neste área.

Considerações Finais

O Node.js é uma excelente linguagem e vale a pena conhece-la para ver as oportunidades que ela possa ajudar. Com certeza o .net core está olhando para ela para competir.