IoT (Internet of Things)

Project Stream: Netflix de jogos da Google

Sabemos que a Netflix revolucionou o mercado de consumo de filmes e séries através da internet. Até pouco tempo atrás, era inimaginável que teríamos um serviço tão bom e que permitisse a comodidade de assistir Filmes e Séries sem sair de casa e a um toque do controle remoto de distância. Porém, o stream de vídeos é um pouco simples pois não há nenhuma interação dos dois lados, o vídeo é executado e exibido na sua TV.

Agora, imagine um jogo onde os comandos executados através do joystick tivessem que ser interpretados, executados no servidor e retornados para sua tela, tudo de forma remota… Complicado, né? Bom, segundo a Google, isso é possível e você só vai precisar do seu navegador para isso.

O que é o Project Stream?

Segundo a Google, o Project Stream é um serviço que visa facilitar a execução de jogos sem que seja necessário o usuário possuir um computador com grandes configurações, como placas de vídeo, processadores e memória ram de alto desempenho. Segundo Catherine Hsiao, product manager da Google, “Ao transmitir fimes ou séries, os usuários ficam confortáveis com alguns segundos de buffer antes de tudo começar.” Porém, para o streaming de jogos, esse buffer é inviável, já que alguns segundos de delay podem fazer toda a diferença para a experiência em sua jogatina.

Sendo assim, o Project Stream da Google visa possibilitar que os jogos possam ser executados diretamente dos seus servidores, porém tudo controlado a partir do computador do jogador.

Por onde jogar?

A idéia da Google é que todos os jogos que sejam disponíveis a partir da sua plataforma sejam executados diretamente do Google Chrome, seu navegador de internet. E porque isso é tão bom?
Primeiro, não precisamos instalar nada além do Chrome (que, talvez, já seja seu navegador principal). Segundo (e mais importante) é que, pelo Chrome ser multiplataforma, não estaremos mais presos a determinados sistemas operacionais, tudo poderá ser feito através do seu SO favorito (Windows, Linux ou MacOS):

Mas, e ai, funciona mesmo?

No dia 12 de outubro de 2018, a Google abriu seu projeto para open beta (qualquer usuário poderia testar, desde que morasse nos EUA 🙁 ) para testar com o novo Assassin’s Creed Odyssey, um jogo extremamente pesado. Dos vários relatos obtidos pela internet, a solução funciona muito bem, desde que você tenha uma internet de qualidade (cerca de 40 mbps), o que é totalmente compreensível. Também há alguns relatos negativos, porém, por ser um serviço beta, também é bem comum.

Concluindo

Com o Project Stream, a Google entra em um novo nincho de mercado, tentando revolucionar a forma de como os jogos são executados. Se até ontem você tinha que comprar um computador “parrudo” para conseguir jogar os principais lançamentos do momento, creio que isso está prestes a mudar!

O que se pode fazer com JavaScript hoje em dia?

Olá, Web Developers!

O JavaScript inicialmente foi criado como um complemento para o navegador da Netscape. Por muito tempo foi visto como uma linguagem ruim, bagunçada e lenta (e estavam certos).

Mas o JavaScript evoluiu muito. Hoje em dia é bem mais organizado, rápido e possui várias funcionalidades que nos facilitam criar várias coisas. Além disso, a linguagem não se limita mais apenas aos navegadores.

Vamos conhecer algumas áreas onde podemos atuar com JavaScript além do seu uso comum e até além dos navegadores. Dessa maneira você poderá usar seus conhecimentos em JavaScript e escolher entrar em alguma área além da web, como desenvolvimento de jogos, robótica, automação, etc.

Observação: esse post não incentiva o uso de JavaScript para tudo. Há de se ponderar a melhor ferramenta/tecnologia para o problema que se precisa resolver.

Node.js

Node.js

Não tem como começar essa lista sem falar do Node. Ele é basicamente uma ferramenta que executa o JavaScript fora do navegador. Quando instalado, chamamos o Node.js pelo terminal. Como não estamos executando o JavaScript em um navegador, os cuidados com segurança são diferentes.

Há várias funcionalidades disponibilizadas para o Node.js, fazendo com que possamos fazer coisas com JavaScript que não conseguimos fazer quando o nosso ambiente é o navegador.

Um exemplo é o acesso a arquivos. Um código JavaScript no navegador não consegue acessar os arquivos do usuário, pois seria uma falta de segurança você entrar em um site e ele vasculhar seu computador.Como o Node.js está instalado em sua máquina, o JavaScript tem liberdade de acessar os arquivos contidos no HD.

O Node.js possibilitou a criação de várias outras ferramentas para podermos usar JavaScript fora do navegador, e hoje em dia é um conhecimento obrigatório para quem quer trabalhar com JavaScript.

https://nodejs.org/

npm

O Node.js vem com o “npm” (node package manager). Com ele podemos gerenciar as dependências de nossos projetos.

Um exemplo: caso queira usar jQuery em seu projeto, ao invés de ter o trabalho de fazer download do jQuery, basta executar o comando:

$ npm install jquery

Caso queira atualizar a versão do jQuery em seu projeto, basta executar o comando:

$ npm update jquery

O npm também pode ser usado para instalar outros programas que podem nos auxiliar no desenvolvimento de nossas aplicações e executar comandos.

https://www.npmjs.com/

Testes

Quando estamos escrevendo código é preciso fazer muitos testes para assegurar que nossas funções estão retornando o valor esperado. É bom sempre testar a mesma função passando vários valores diferentes, inclusive valores que a função não aceita para ver se há necessidade de criar um tratamento para a aplicação não quebrar.

Acontece que qualquer alteração em uma função pode afetar outras funções. Então há ferramentas que facilitam a criação de testes.

Os mais famosos são: QUnit, Mocha e Jasmine.

Qualidade de Código

Quando estamos escrevendo nosso código, é muito importante mantê-lo com qualidade. Uma característica de um código de qualidade é mantê-lo uniforme.

Isso inclui sempre identar o código, padronizando a quantidade de espaços ou se será usado “tab”, se ao criar uma função você irá abrir chaves “{“ na mesma linha ou em uma linha nova, etc.

Há ferramentas como o JSLint e JSHint que analisam o nosso código e indicam se estamos mantendo as regras que foram definidas.

Automatização de Tarefas

Quando estamos desenvolvendo é comum precisarmos realizar certas operações para melhorar o nosso código. Um exemplo é minificar o nosso código, fazendo com que os arquivos fiquem menores, o que faz a aplicação ser carregada mais rapidamente pelo navegador.

Outras tarefas podem ser a execução de testes de qualidade, como o JSLint, ou testes de software, como o Jasmine.

Para nos auxiliar temos os automatizadores de tarefas. Os mais famosos são o Grunt e o Gulp. Podemos definir qualquer tarefa e pedir para que estas ferramentas as executem para nós.

Imagine que quando salvamos um arquivo, ele deve ser testado pelo Jasmine, analisado pelo JSLint e, se todos os testes passarem, iremos minificar o arquivo.

E mais! Podemos querer também que se tudo der certo, ele envie um E-mail para o nosso cliente dizendo que em breve iremos lançar uma nova versão da nossa aplicação!

Eles nos ajudam a automatizar o que quisermos, o limite é sua imaginação!

Servidores

Normalmente os códigos escritos no lado do servidor são feitos com linguagens como Java, PHP, Ruby, etc.

Com o Node.js foi possível começar a escrever código para o servidor com JavaScript. Já houve outras tentativas, mas o Node.js teve mais sucesso.

Os frameworks mais conhecidos para Node.js são: Express, Hapi e Koa.

Também podemos criar código Back End com o Meteor. O Meteor é uma plataforma de desenvolvimento fullstack (front e back end).

Bancos de Dados

O MongoDB é um banco de dados orientado a documentos. O console que usamos para acessar os dados executa JavaScript. Então se você sabe JavaScript, pode ter facilidade em aprender a gerenciar o MongoDB.

https://www.mongodb.com/

Aplicativos Mobile

Com JavaScript também podemos criar aplicativos mobile. A vantagem é usar uma única linguagem de programação para as diferentes plataformas. O modo mais conhecido é usando o Cordova/PhoneGap. Com eles nós criamos aplicações híbridas.

São chamadas de “híbridas” porque unem duas tecnologias diferentes. Por exemplo, o código nativo do Android é escrito em Java. Com o Cordova nós criamos aplicações web comuns, com HTML+CSS+JavaScript. Para acessar funcionalidades do dispositivo, há uma integração do código nativo em Java e nós acessamos essas funcionalidades pelo JavaScript.

Quando abrimos o aplicativo, estamos na verdade abrindo um navegador interno que irá apresentar a nossa aplicação e que pode acessar funcionalidades do dispositivo que não poderíamos acessar a partir de uma aplicação web comum.

Então a ideia de “híbrido” é porque estamos juntando tecnologia web com a tecnologia nativa.

http://facebook.github.io/react-native/

Também podemos criar aplicações nativas. As ferramentas mais conhecidas são o React Native e o NativeScript. Com eles nós criamos telas com XML ao invés de HTML, e podemos estilizar com CSS. Isso será convertido para uma tela nativa de cada plataforma, como Android e iOS. Já as ações são escritas com JavaScript mesmo.

A vantagem disso é que, por ser uma aplicação nativa ao invés de uma aplicação com um navegador, teremos melhor performance do que uma aplicação híbrida.

Outra vantagem é que as aplicações híbridas dependem do navegador padrão do sistema, então corremos o risco de criar um código que o navegador daquele dispositivo não suporte. Em uma aplicação nativa, já que não dependemos de navegadores, não precisamos nos preocupar se haverá suporte para as funcionalidades ou não.

Softwares Desktop

Com o Node.JS também é possível criar aplicações Desktop. Estas aplicações normalmente utilizam o Chromium, navegador de código aberto que está por trás do Google Chrome, e o Node.js.

As telas são feitas com HTML5 e CSS3, e o JavaScript pode se comunicar diretamente com o Node.js, que fica embutido na aplicação.

Atualmente o framework mais utilizado é o Electron, criado pela equipe do GitHub. Com ele já foram desenvolvidos famosos softwares como o Atom, Slack e Visual Studio Code.

https://electronjs.org/

SmartTVs

Também é possível criar aplicativos para SmartTVs. Você irá também usar HTML/CSS/JavaScript. As que dão maior suporte para isso são as TVs da Samsung.

3D

A partir do elemento canvas do HTML5 também temos uma API chamada WebGL. Ela nos ajuda a trabalhar com renderização de gráficos 2D e 3D.

Uma biblioteca que nos ajuda a trabalhar com 3D com JavaScript é o three.js.

https://threejs.org/

Jogos

Também é possível criar jogos com JavaScript. Isso graças ao elemento canvas do HTML5, que nos permite desenhar na tela com JavaScript.

Há várias bibliotecas que nos ajudam a criar jogos com JavaScript.
Uma das mais famosas é o Impact, que é paga. Uma outra famosa, que é gratuita, é o Phaser.

Como os jogos apenas usarão o elemento canvas do HTML5 e JavaScript, você poderá criar jogos para qualquer lugar que os suporte ou possua um navegador.

Pode-se usar ferramentas como o Cordova/Phonegap, mas também há outras ferramentas que ajudam a otimizar jogos feitos com JavaScript para dispositivos móveis.

Plugins

Há softwares que possibilitam a criação de plugins. Isso permite que as pessoas criem novas funcionalidades para eles. Normalmente esses plugins são escritos com linguagens de scripts.

Um exemplo é o PhotoShop. Ele aceita a criação de plugins escritos em JavaScript.

Sistemas Operacionais

Um sistema baseado no Node.js, escrito apenas com JavaScript, foi desenvolvido. É o NodeOS.

Qualquer pacote do npm é um pacote do NodeOS, o qual conta com mais de 475.000 pacotes. O objetivo do NodeOS é fornecer apenas o necessário e o npm cuida do resto. Já que qualquer um pode contribuir com o npm, qualquer um pode criar pacotes para o NodeOS.

Você pode ver mais em:

http://node-os.com/

Programação de Hardwares e Internet das Coisas

Com o Node.JS também é possível controlar hardwares. Podemos então usar o JavaScript para trabalhar além das telas dos computadores e celulares, como controlar drones.

Ao programar placas, podemos criar códigos para até mesmo integrar vários objetos, o famoso “Internet das Coisas” (IoT).
Imagine usar JavaScript para controlar as lâmpadas, portas e janelas de sua casa de acordo com a iluminação do ambiente. Ou que quando o GPS do seu smartphone perceber que você está chegando em casa ou no trabalho, ligue a cafeteira para que o café esteja pronto quando você chegar.

Um exemplo é o noduino, um framework para acessar os controles básicos do Arduino a partir de aplicações web usando HTML5, Socket.IO e Node.JS.

Também há o projeto Tessel. No próprio site você pode comprar as placas para montar o seu produto.

Outro famoso projeto é o Cylon.js. Ele é um framework voltado para robótica, computação física e Internet das Coisas.

Você pode ver mais em:

Hologramas

O JavaScript também é capaz de ser utilizado com hologramas.
Um exemplo é o HoloJS, da Microsoft, que é um framework para criar aplicações holográficas usando JavaScript e WebGL.

Realidade Virtual e Realidade Aumentada

Muito se fala sobre Realidade Virtual e Realidade Aumentada. Um exemplo para realidade aumentada é o JavaScript ARToolKit.

https://github.com/artoolkit/jsartoolkit5

Inteligência Artificial

Também podemos aproveitar o JavaScript na área da inteligência artificial. Há muitas bibliotecas e exemplos.

Uma biblioteca usada para isso é a “deeplearn.js”, que você pode conhecer melhor em:

https://deeplearnjs.org/ .

Concluindo

Hoje em dia várias linguagens de programação tentam estar onipresentes, como é o caso do JavaScript. Porém, nem sempre é algo bom. Não existe “bala de prata”. Há linguagens que estão mais evoluídas e adaptadas para certas áreas.

Mesmo que JavaScript seja minha linguagem principal, há momentos em que prefiro usar outras linguagens de programação, pois admito que possuem ferramentas melhores para se trabalhar e acabam entregando algo com mais rapidez e qualidade.

A vantagem que enxergo em utilizar uma única linguagem em várias áreas é possibilitar que uma pessoa com conhecimento em uma linguagem possa experimentar novas áreas, ou que uma pequena empresa possa reaproveitar os conhecimentos da equipe e códigos para trabalhar com outras tecnologias.

Android Things e a Internet das Coisas

O Android é conhecido por dominar o mercado de smartphones e tablets, sendo o sistema operacional para mobile mais utilizado nos últimos anos. E não parou por aí, o robozinho verde está ampliando e quer estar presente em todos os dispositivos possíveis! Depois do Android Auto (para carros) e o Android Wear (para dispositivos vestíveis como os relógios) o Google lançou o Android Things, uma versão do sistema operacional para a Internet das Coisas, também conhecida como IoT (Internet of Things).

A Internet das Coisas

Essa tecnologia está surgindo para revolucionar o nosso dia a dia. Tem como objetivo conectar todos, sim, você leu certo, todos os dispositivos que utilizamos à rede mundial de computadores. Geladeiras, televisão, micro-ondas, relógios, alarmes, ar-condicionado, termostatos, máquinas de lavar, carros, máquinas industriais, enfim, TUDO! A ideia vai além de simplesmente conectar todos os dispositivos a internet, mas sim, torná-los mais eficientes e fazer com que comuniquem entre si.

Imagine sair de casa e, quando estiver voltando, acionar pelo celular o ar-condicionado que consultará o termostato para identificar a temperatura ideal para o ambiente. Ou então, toda a rede elétrica da sua casa ser cortada automaticamente em caso de vazamento de gás e você ser notificado pelo celular. São inúmeras as aplicações que podem surgir a partir de todos os equipamentos conectados. Esta revolução tecnológica vai além de residências, também pode atuar em lojas, indústrias, hospitais, transporte público, fazendas, plantações, etc.

Mas, é claro, não será tão simples assim, se tudo está conectado e dependente da rede, existem riscos caso algum equipamento falhe, seja um erro de software ou até mesmo uma invasão hackers. Por isso, há muito o que discutir sobre o assunto, afinal, não queremos ser vítimas da nossa própria tecnologia.

Android Things

Como todas as coisas conectadas à internet precisarão de um sistema operacional, a gigante da tecnologia não demorou e lançou o Android Things. Este SO é dedicado exclusivamente para a IoT.

A ideia do Google é de que qualquer desenvolvedor Android possa desenvolver um dispositivo inteligente utilizando as APIs disponibilizadas, além de tornar a integração com os outros dispositivos, que já utilizam outras versões do sistema, de forma simples e fácil. Por isso, o Google já disponibiliza tudo o que você precisa para começar a desenvolver com o Android Things através do site para desenvolvedores.

Até o momento, existem quatro plataformas de hardware disponíveis para o Android Things:

  • Intel® Edison: Possui um processador Intel® Atom™ de 500MHz dual-core x86 e 1 GB de RAM;
  • Intel® Joule: Possui um processador Intel® Atom™ de 1.5GHz/1.7GHz quad-core x86 e 3GB/4GB de RAM;
  • NXP Pico i.MX6UL: Processador NXP i.MX6Ultralite de 500MHz ARM Cortex A7 e 512MB de RAM;
  • Raspiberry Pi 3: Com um processador Broadcom BCM2837 de 1.2GHz quad-core Cortex A53 e 1GB de RAM.

Para cada um destes hardwares existe uma imagem do sistema operacional para download.

A arquitetura do Android Things não é muito diferente do convencional. Ele estende o core do framework do Android com um adicional das APIs fornecidas pela Things Support Library. Essas APIs permitem que haja integração dos aplicativos com novos tipos de hardware que não são encontrados em dispositivos móveis.

Além disso, esta plataforma é simplificada e trabalha com single application. Não possui aplicativos de sistema e o seu app é iniciado automaticamente na inicialização do SO. Possui suporte para alguns serviços do google como as APIs de Localização, Mobile Vision, Firebase Storage, FCM, Firebase Realtime Database, entre outras. As APIs que requerem autenticação não estão disponíveis como AdMob, Firebase Authentication, Maps, etc.

Enfim, o Android Things está vindo com tudo para impulsionar a IoT e mostrar para o que veio. Então é bom ficar atento às novidades que, com certeza, não pararão de surgir.

Um abraço, e até a próxima!

JUNTE-SE A MAIS DE 150.000 PROGRAMADORES