+2 Cursos de Azure pela Microsoft Learning \0/

Standard

Esse mês finalizei mais dois cursos que estava fazendo pela Microsoft Learning na plataforma da edX.

Microsoft AZURE202x: Microsoft Azure Virtual Machines

 

Microsoft AZURE206x: Microsoft Azure App Service

Agora o foco é dar continuidade nos demais cursos para finalizar o tão esperado Architecting Microsoft Azure Solutions hehe

See you soon!

Fazendo o Deploy de uma aplicação NodeJs + Socket.io para um WebSite do Azure utilizando o Visual Studio Code

Standard

Neste post veremos como podemos fazer o deploy de aplicações NodeJs que possuam recursos de comunicação em tempo real (no caso utilizando Socket.io) para um WebSite do Azure utilizando o novo editor de código da Microsoft chamado Visual Studio Code

Nota: Para este exemplo vou estar utilizando a aplicação criada neste post que é feita em NodeJs + Socket.io onde exibe em tempo real o percentual de consumo da cpu.

Abaixo listo os tópicos que serão abordados ao longo do artigo:

– Configurando o VSCode e as permissões do git para habilitar Sync, Pull e Push pelo editor
– Criando um WebSite no Azure para sincronização automática com o Github
– Habilitando e configurando WebSockets na WebSite criada
– Configurando o arquivo web.config
– Rodando a aplicação com WebSockets e Long Pooling – Entendendo os transportes

Continue reading

Consultando o percentual de uso da CPU com NodeJs + Socket.io

Standard

Tempos atrás fiz um post mostrando como podemos monitorar o consumo de CPU de um servidor e exibi-lo em tempo real utilizando Asp.net + SignalR. Na verdade a principal intenção não foi a utilidade do monitoramento, mas sim aprender como podemos trabalhar em uma aplicação com informações em tempo real, com transmissão de notificações, etc.

Pois bem, hoje em dia estou usando e estudando bastante NodeJs e decidi refazer o exemplo citado acima, porém, agora com NodeJs + Socket.io. Então, vamos lá:

Para Neste exemplo não vou utilizar o Visual Studio, mas sim o bom e velho commandline com algum editor de texto qualquer, desta forma vamos primeiramente criar um diretório para nosso projeto:

md cpu-usage-node-socketio

Continue reading

ASP.NET SignalR – Acompanhando o percentual de uso da CPU em tempo real

Standard

Atendendo alguns pedidos do Facebook e por email que recebi semana passada, hoje vou demostrar um exemplo de utilização do SignalR em uma aplicação que NÃO seja um chat. 🙂

Importante: Se você não sabe o que é o SignalR, nunca ouviu falar, ou não tem conhecimento, aconselho a leitura dos meus artigos anteriores sobre o assunto antes de continuar.

Situação Atual

Realmente a maioria dos artigos, posts e exemplos encontrados pela web demonstram a utilização do SignalR em aplicações de chat, muito bacana, isto facilita muito as coisas para quem precisa implementar algo do tipo, porém, tem um lado muito negativo: a maioria do pessoal vê vantagem em utiliza-lo apenas em aplicações de chat, ou algo relativamente simples. Porém, o SignalR é uma biblioteca ALTAMENTE completa e robusta, podendo ser utilizadas em diversos tipos de situações e projetos.

Particulamente utilizo o SignalR regularmente nos projetos que trabalho, e até hoje, nunca foi para criar um chat!
Continue reading

ASP.NET 5 – Explorando as TagHelpers com MVC 6

Standard

Um novo recurso que está sendo incorporado ao ASP.NET 5 é o conceito de TagHelpers. Assim como todo o projeto do ASP.NET (que agora é open-source) está ainda em desenvolvimento, os recursos e features das TagHelpres também estão, desta forma ainda não existe um pacote definido e muito provavelmente sofrerá alterações até a versão final.

Estou considerando a publicação do Scott Hanselman como base para este artigo, porém, no final exponho minha opinião e como acho que tudo isso deveria funcionar.

Resumidamente, TagHelpers nos fornecem uma nova forma de criação de tags customizáveis (que podem ser sync ou async) para marcação de código em nossas views. Hoje em dia, o recurso que possuímos no ASP.NET MVC mais parecido com isso é o conceito de HtmlHelpers.
Continue reading

Implementando um Extension Method para coleções utilizarem a expressão Soundex

Standard

Vou demostrar neste artigo como podemos criar um Extension Method para coleções (IEnumerable) poderem utilizar um recurso muito utilizado em Transact-SQL chamado Soundex.

Para quem não conhece [ou não sabe nem o que é], a expressão Soundex retorna um código de quatro caracteres utilizado para comparar a semelhança entre duas sequências de caracteres. Ou seja, foneticamente falando, “casa” seria o mesmo que “caza”, ou até mesmo “cazza”, pois o som ao reproduzi-las seria o mesmo.

O algoritmo para a geração dos quatro caracteres para a comparação fonética é realizado utilizando algumas regras e “quase todas” letras do alfabeto.

Básicamente, as seguintes regras são consideradas:

1- Guarda-se o primeiro caracter da sequência e ignora os demais que forem iguais a (a, e, i, o, u, y, h, w);
2- concatena-se os próximos caracteres com seu respectivo código:
b, f, p, v => 1 
c, g, j, k, q, s, x, z => 2 
d, t => 3 
l => 4 
m, n => 5 
r => 6 
3- Dois caracteres adjacentes com o mesmo número são codificados como um único número, assim como, dois caracteres iguais separados por ‘h’ ou ‘w’ são codificados como um número único.
4- Se houver letras duplicadas, a segunda letra é ignorada
5- Continue até que o resultado seja três números, ou, preencher com “0” até ficarem três números.

Vamos criar nossa rotina para geração do código Soundex:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/// <summary>
/// Gera código Soundex
/// </summary>
/// <param name="valor"/>Valor base a ser verificado
/// <returns>String com código Soundex</returns>
public static string GeraSoundex(this string valor)
{
    if (String.IsNullOrEmpty(valor))
        return null;

    StringBuilder resultado = new StringBuilder(valor.Length);

    string valorBase = valor.ToUpper().Replace(" ", string.Empty);

    resultado.Append(valorBase[0]);
    char valorAnterior = '0';
    for (int i = 1; i < valorBase.Length; i++)
    {
        char valorEquivalente = '0';
        char valorAtual = valorBase[i];

        if ("BFPV".Contains(valorAtual))
            valorEquivalente = '1';

        else if ("CGJKQSXZ".Contains(valorAtual))
            valorEquivalente = '2';

        else if ("DT".Contains(valorAtual))
            valorEquivalente = '3';

        else if ('L'.Equals(valorAtual))
            valorEquivalente = '4';

        else if ("MN".Contains(valorAtual))
            valorEquivalente = '5';

        else if ('R'.Equals(valorAtual))
            valorEquivalente = '6';

        if (valorEquivalente != valorAnterior && valorEquivalente != '0')
        {
            resultado.Append(valorEquivalente);
            valorAnterior = valorEquivalente;
        }
    }
    while (resultado.Length < 4)
        resultado.Append("0");

    return resultado.ToString(0, 4);
}

Continue reading

Iniciando com SignalR – Agora como membro do ASP.NET

Standard

Contava os dias para a integração do SignalR com o ASP.NET, pois a cada dia o mesmo se tornava mais estável, com mais conteúdo online, além de ser muito bem aceito e interpretado pelos desenvolvedores web ao redor do mundo.

Basicamente agora sob o ASP.NET além de contar com seus recursos para aplicações web em tempo real, podemos utilizar templates específicos no Visual Studio, além de contar com auxílio, dicas e tutoriais pelo próprio site do asp.net. Oficialmente o SignalR torna-se membro do ASP.NET.

Algumas coisas mudaram (para melhor é claro) em relação a forma de se trabalhar com o mesmo anteriormente, vejamos alguns itens importantes:
Continue reading

Linq to SQL – Catalogando Log (SQL query/Command) do Linq em arquivos externos

Standard

Um recurso bem interessante que temos no Linq (toSQL e Entity), é a possibilidade de catalogar e analisar as queries que são geradas. Ou seja, como o linq gerencia a forma de geração do código SQL/command a ser executado efetivamente na base de dados, podemos com este recurso, verificar se nossa query linq está sendo processada da melhor forma possível e com a melhor performance.

Para tanto, vamos primeiramente criar uma estrutura para a realização de uma query bem simples, veja:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Cria contexto de dados
DBDataContext _db = new DBDataContext();

// Efetua uma query
var query = from p in _db.Produtos
where p.valor.HasValue
select p;

// Registra LOG com a query gerada pelo LINQ
_db.Log = new LogQueryLinq();

// Percorre a query e mostra ao usuário cada produto
foreach (var p in query)
Console.WriteLine(string.Format("Produto:{0} | Valor Total{1}", p.nome, p.valor ));

Continue reading

SignalR – Trocando mensagens e notificações entre Server/Client de forma global e individual

Standard

No post anterior sobre o SignalR, fiz uma introdução rápida sobre a biblioteca, onde conseguimos observar que realmente é muito fácil a utilização da lib, além de demonstrar como podemos realizar a troca de mensagens/notificações entre server/client em tempo real.
Neste artigo, vou demonstrar como podemos requisitar uma função em server-side, e após o término, notificar todos os usuários conectados (client-side), ou apenas algum(ns) usuário(s) específico(s).

Para todos os exemplos, estou considerando que a importação dos scripts e referências para o SignalR já tenham sido realizadas (No artigo anterior eu demonstro como definir as referências e scripts para o SignalR funcionar corretamente).

Notificação Global

Veja como é simples o envio de notificações em tempo real para todos os usuários conectados, primeiramente vamos criar nossa conexão no script do cliente (client-side):

<script language="javascript" type="text/javascript">

    $(function () {

	// Cria objeto de conexão
	var nomeHubClient = $.connection.nomeHub;

        // Função que envia mensagem para o servidor
        $("#btnEnviaMsg").click(function () {

	    var mensagem = $('#mensagem').val();
            nomeHubClient.enviaMensagem(mensagem);
            $('#mensagem').val("");

        });

        // Inicia a conexão
        $.connection.hub.start(function () {
            // Envia para o servidor o usuário que está criando a conexão
	    // O campo #nomeUsuario é apenas um campo presente na nossa página aspx que identifica o nome do usuário em questão (Não é obrigatório)
	    nomeHubClient.join($('#nomeUsuario').val(""));
        });

        // Função chamada em real-time pelo servidor
        nomeHubClient.novaMensagem = function (mensagem) {
            mensagem = $("#mensagens").html() + "<br />" + mensagem;
            $("#mensagens").html(mensagem);
        };
    });

</script>

Continue reading