Desenvolvimento com Node.js, Arquitetura HMVC e Framework Total.js

Desafios na Web que conhecemos:

Fornecer maneira fácil de criar sistema escaláveis, pois em linguagens como JAVA ou PHP cada conexão instancia um novo encadeamento que, potencialmente, é acompanhado por 2 MB de memória. Se um sistema houver 8 GB de RAM, isso aplica um número teórico de conexões simultâneas de em cerca em torno de 4.000 usuários.
Por exemplo no JAVA, as variáveis estáticas e caches necessitam ser compartilhados entre as JVMs de cada servidor, onde o gargalo que toda aplicação Web enfrenta em gerenciar o número de conexões simultâneas de um servidor.

Problemas que o Node resolve:

Node.js soluciona o problema mudando a forma como uma conexão é feita no servidor. Em vez de iniciar um novo encadeamento do SO para cada conexão (e alocar a memória), o qual para cada conexão cria um processo, que não requer que o bloco de memória que o acompanhe. O Node alega que nunca ocorrerá um impasse de bloqueios, pois não são permitidos bloqueios e ele não bloqueia diretamente para realizar chamadas de I/O. O Node também assume que um servidor suporte milhares de conexões simultâneas. De fato, altera o panorama do servidor ao mudar o gargalo do número máximo de conexões, para que a capacidade de tráfego de um único sistema seja escalável e suporte de forma rápida as milhares de conexões propostas.

Como o Node Funciona:

O Node é executo através de uma engine denominada V8 JavaScript, o qual é um mecanismo subjacente do JavaScript que o Google usa com seu navegador Chrome. Poucas pessoas pensam sobre o que de fato ocorre com o JavaScript no cliente. Um mecanismo JavaScript, de fato, interpreta o código e o executa. Com o V8, o Google criou um interpretador ultra rápido escrito em C++ que tem um aspecto totalmente exclusivo.

Arquitetura HMVC:

O padrão MVC, que todos frameworks modernos utilizam a abordagem de Model-View-Controller para separar o acesso ao banco de dados, a apresentação e o controle de toda a aplicação.

Mas, além do MVC, existem uma abordagem diferente, considerada, por alguns, como uma evolução a esse consagrado padrão. Trata-se do Hierarquical Model-View-Controller(Model-View-Controller Hierárquico), mais conhecido como HMVC.

Podemos citar o uso em seu site o BBC News ou Guardian, o qual temos vários tipos de conteúdo dinâmico compartilhados em várias páginas dentro dessa proposta arquitetura.

Em um aplicativo da Web MVC tradicional, um componente de roteamento tratará a solicitação de URL. Essa solicitação será mapeada para uma ação em um Controller, onde a lógica de negócios presente em um Model é iniciada e, em seguida, transmitida para uma View para sua devida renderização.

Isso funciona bem para aplicativos simples, mas quando seu aplicativo cresce em complexidade, você tende a achar que precisa compartilhar funcionalidades entre controladores.

Este é o lugar onde HMVC entra em ação, onde  permite que você emita sub-requests, o qual  são iniciadas pela View uma vez que ele sabe qual conteúdo é necessário (pense nisso como uma árvore de solicitações MVC).

Assim, se a sua página for composta por, por exemplo, as últimas notícias, tweets, produtos em geral e conteúdo de propaganda, você terá a solicitação de sua Controller e, em seguida, quatro solicitações adicionais HMVC para fornecer conteúdo para as áreas.

Então por que devemos usar esse padrão?
Porque mantém nossas Controller menores e as torna muito mais reutilizáveis, onde cada ação se torna responsável por uma única função e nos ajuda a aderir ao SRP (Single responsibility principle).

Framework Total.js:

O framework Total.js é uma estrutura do lado do servidor para o Node.js, escrito em JavaScript puro, semelhante ao Laravel do PHP ou ao Django do Python ou ASP.NET MVC.

Você pode usar qualquer estrutura ou biblioteca do lado do cliente, como jQuery, D3, Fabric.js, Angular, Backbone, React, Knockout, Vue, etc.

Você pode usar qualquer banco de dados (RDMBS ou NoSQL) ou qualquer estrutura do cliente.

Confira abaixo algumas vantagens e funcionalidades:

Compatibilidade com versões anteriores
Arquitetura HMVC
Estrutura de diretórios clean
Totalmente assíncrono
Servidor web completo com o serviço de arquivos estáticos
Suporta geradores
Código isomórfico
Suporta restrições de IP
Suporta redirecionamentos
Suporta componentes reutilizáveis
Suporta just-in-time JS, CSS (variáveis ​​e aninhamento) e compressor HTML
Suporta a fusão just-in-time de arquivos estáticos (JavaScripts, CSS ou HTML)
Suporta o mapeamento de arquivos just-in-time
Suporta streaming de mídia (por exemplo, vídeos)
Suporta módulos e pacotes
Motor de processamento de imagem incorporado via ImageMagick ou GraphicsMagick
Suporta WebSockets (RFC 6455) e eventos Server-Sent
Suporta multipart / x-mixed-replace (streaming de câmera IP) upload e envio
Suporta roteamento RESTful
Suporta middleware (como express.js) com opções personalizadas
Suporta teste de unidade
Suporta workers para operações pesadas de CPU
Suporta arquivos de configuração 4x (common, debug, release and test)
Mailer com templates (Gmail, Outlook ou servidores SMTP clássicos com auth e TLS)
Mecanismo de visualização incorporado (layouts, nested views, conditions, loops, inline helpers, etc.)
Localização com ferramenta diff e exportação CSV
Suporta mecanismo de cache
Suporta esquemas para criação de objetos de negócios com validações, fluxos de trabalho, etc
Suporta injetar scripts, pacotes e visualizações de URL
Compatível com protótipos de String, Data, Número e Array
Suporta utilitários adicionais (e.g. create request, XML parsing, etc.)
Suporta temas
Suporta scripts
Possibilidade de reescrever a funcionalidade existente
Banco de dados embutido NoSQL (joins, scalar operations and in-memory mode)
Você pode usar o framework como biblioteca total.js (415 kB)

Deseja testar na prática o Node.JS, HMVC e Total.js?

Acesse o site de produtos do Total.js, realize o download de algum produto disponível e realize os testes com o poder do framework sendo executado na rapidez do node dentro da arquitetura HMVC.

Fontes / Referências:

https://imasters.com.br/artigo/22016/javascript/o-que-exatamente-e-o-nodejs/
https://www.madetech.com/blog/hierarchical-model-view-controller-pattern
https://github.com/totaljs/framework

 

Status

Hello Arduino Nano

img_8846Vendo uma LED piscando é divertido nessa playground de IoT, ainda mais usando um Arduino Nano para a tal brincadeira e estudos.

Então, vamos começar a diversão.

O que você vai precisar:

Arduino Nano
Protoboard
Um LED (eu usei 3V a 20mA led)
Um resistor de 100 ohm e fiação.

Conecte o positivo no final do LED com o resistor,  outra extremidade para o digital pino 13 e o negativo  para o aterramento conforme demonstro nas imagens abaixo:

Código compilado e enviado ao Arduino Nano:

fhv3bwvikpsaank-large

Veja o vídeo com o resultado abaixo: