JavaScript é a linguagem mais demandada

JavaScript é a linguagem mais exigida em 2020, segundo um relatório da DevSkiller, o JavaScript substitui o Java na comparação com o relatório do ano anterior. Sendo que agora o SQL está em segundo lugar e ele caiu de primeiro para terceiro.

O crescimento na popularidade do JavaScript mostra que existe uma grande necessidades dos desenvolvedores de criar aplicativos web em contraste com o declínio de grandes sistemas focados no back-end.

Segue abaixo as 5 linguagens mais procuradas:

  1. JavaScript
  2. SQL
  3. Java
  4. HTML/CSS
  5. .NET/C#

Outras observações que são importantes destacar:

  • 72% das empresas procurando estão procurando por desenvolvedores com conhecimento de JavaScript. Seguido por 55% que estão procurando profissionais com conhecimentos de SQL e 53% de desenvolvedores Java.
  • React, Spring, ASP.NET, MySQL e HTML são as tecnologias mais populares para as linguagens mais populares.
  • Para desenvolvedores Python, análise de dados é o termo mais comum sendo procurado. Seguido por Django e NumPy.

Conheça o Vue.js, um framework JavaScript:

Vue é um framework para construção de interfaces JavaScript. Ele é projetado para ser adotado de forma incremental. A biblioteca principal é focada na camada de visualização e é de fácil entendimento e integração com outras bilbiotecas ou projetos existentes.

Instalando:

Você pode incluir diretamente o vue em uma tag script, via cdn:

<!-- Utilize para fins de prototipagem ou aprendizado -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

<!-- Utilize para produção um número de versão específico, para evitar quebras inesperadas -->
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.0"></script>

Se você estiver utilizando ES Modules:

<script type="module">
  import Vue from 'https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.esm.browser.js'
</script>

npm:

# latest stable
$ npm install vue

bower:

# latest stable
$ bower install vue

Começando:

Renderização Declarativa:

O vue nos permite renderizar declarativamente dados para o DOM:

<div id="app">
  {{ message }}
</div>
let app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})

Com isso, já criamos o nosso primeiro aplicativo Vue! Os dados e o DOM agora estão vinculados e tudo é reativo.

<div id="app-2">
  <span v-bind:title="message">
    Hover your mouse over me for a few seconds
    to see my dynamically bound title!
  </span>
</div>
let app2 = new Vue({
  el: '#app-2',
  data: {
    message: 'Voce carregou esta pagina em ' + new Date().toLocaleString()
  }
})

Você verá a “message” pousando o mouse por cima do seu elemento renderizado no DOM.

Condicionais e Loops:

Continue lendo “Conheça o Vue.js, um framework JavaScript:”

Conheça o Meteor, um framework JavaScript.

O Meteor é um framework JavaScript completo para a criação de aplicativos Web e móveis moderno. Ele inclui um conjunto de tecnologias para a criação de aplicações reativar, uma ferramenta para construção, entre outros.

  • O Meteor permite o desenvolvimento JavaScript em ambientes de servidores de aplicativos, navegadores da web e dispositivos móveis;
  • Ele usa dados na conexão, ou seja, o servidor envia os dados, não HTML, e o cliente os processa;
  • Full Stack reactivity: Sua UI reflete perfeitamente o true world state com o mínimo de esforço de desenvolvimento.

Por onde começar?

O Meteor possui suporte para OS X, Windows e Linux.

No Linux e OSX, execute o seguinte comando:

curl https://install.meteor.com/ | sh

No Windows, primeiro instale o Chocolatey e, depois, use o seguinte comando no Prompt de Comando como Administrador:

choco install meteor

E agora?

Depois de instalado o Meteor, crie um projeto:

meteor create myapp

Depois de criado, execute-o localmente:

cd myapp
meteor npm install
meteor

Sua saída será algo como:

# Meteor server running on: http://localhost:3000/

O meteor já vem com o npm incluído, ou seja, você pode digitar meteor npm sem se preocupar se está instalado.

Agora, vamos criar um app simples:

Para criar um app, abra o seu terminal e escreva:

meteor create simples-todos

Isso vai criar uma nova pasta chamada simple-todos, com todos os arquivos que o aplicativo Meteor necessita:

client/main.js        # um arquivo de JavaScript carregado no cliente
client/main.html      # um documento HTML para definir seu templates[
client/main.css       # um arquivo CSS para definição de estilos
server/main.js        # um arquivo JS carregado no servidor
test/main.js          # um arquivo JS para testes
package.json          # um arquivo de controle para instalar pacotes npm
package-lock.json     # descreve a árvore de dependência npm
node_modules/         # pacotes instalados por nmp
.meteor/              # arquivos internos do Meteor
.gitignore            # um arquivo de controle para GIT

Para rodar o aplicativo criado:

cd simple-todos
meteor

Agora, abra o seu web browser e vá para http://localhost:3000 e veja o seu aplicativo rodando. Experimente colocar um <h1> dentro do seu client/main.html e veja a sua página ser atualizada com o novo conteúdo!

Você pode verificar a documentação original em inglês aqui: https://www.meteor.com/tutorials/blaze/creating-an-app

Gostou deste artigo? Comente abaixo!

[Post rápido]Novidades do TypeScript

É isso mesmo pessoal, a alguns dias saiu uma nova versão do TypeScript, e como em algumas das versões anteriores, eu não podia deixar de escrever algo rápido sobre 🙂

Eu irei dividir esse post em algumas partes para tentar explicar cada uma das novidades dessa nova versão, nesse primeira eu irei abordar: Optional Chaining e Nullish Coalescing.

O primeiro passo será verificar a sua versão. Para isso, abra um terminal no seu computador e execute o comando tsc–version. Abaixo você tem uma imagem demonstrando a minha versão.

Agora, caso você esteja com uma versão menor que a 3.7, execute o comando abaixo para atualizar a sua versão:

npm i -g typescript@latest

Com o ambiente atualizado, vamos as novidades 🙂

Optional Chaining

Essa funcionalidade nos permite validar se uma expressão tem um valor null ou undefined, sem a necessidade de utilização de um if. Para ficar mais claro, vamos a dois exemplos práticos:

Imagine que você tem o retorno de uma API e precisa validar ele antes de passar esse valor para uma variável.

A forma mais simples seria utilizando um operador ternário como no exemplo abaixo:

let t = (video === null || video === undefined) ? 
undefined :video.media.thumb();

Agora com essa nova funcionalidade nós podemos passar o operador ? para validar esse valor antes de passar ele para variável t:

let t = video?.media.thumb();

Bem mais elegante né?

Nullish Coalescing

Essa funcionalidade utiliza o operador ?? para validar uma expressão, caso o valor da esquerda seja null, ele retorna o valor default, caso não, ele retorna o valor que está sendo validado.

Em cenários como esse também é muito comum a utilização de um ternário:

let numbers = null;
let code = (numbers !== null && numbers !== undefined) ? 
numbers : 10;
console.log(code);

Agora nessa nova versão nós podemos utilizar o operador ?? para validar a nossa expressão e em caso de um valor null ou undefined, ele ira pegar o valor default. Esse operador pode substituir a utilização dos ||.

let numbers = null;
let code= numbers ?? 10;
console.log(code);

Bom, a ideia desse post era ser algo rápido demonstrando duas das novidades dessa nova versão do TS.

Espero que tenham gostado e até o próximo post pessoal 😉

Confira a publicação original em: https://medium.com/xp-inc/post-r%C3%A1pido-novidades-do-typescript-98970a46d591

Gostou dessa publicação? Comente abaixo!

Conheça Drop.js, uma biblioteca JavaScript

Drop.js é uma biblioteca JavaScript e CSS para criação de menus dropdowns e outros pop-ups. A biblioteca utiliza o Tether.js para posicionar seus elementos com eficiência.

Conheça alguns recursos:

Como o Drop é construído em cima do Tether.js, você consegue usufruir dos benefícios de posicionamento eficientemente.

  • Drops podem ser alinhados dentro de outros drops;
  • O Drop usa acelração da GPU para se manter em 60fps ao utilizar o scrolling;
  • Você pode utilizar toda a potência do Tether para posicionar o seu Drop em qualquer lugar;
  • Eles podem ser configurados para abrir quando o usuário clica, passa o mouse ou focaliza um elemento;
  • Os Drops são reposicionados automaticamente quando o usuário utiliza o scroll na tela, reorientando para permanecer na exibição;
  • O Drop é mantido pelos desenvolvedores do HubSpot que se preocupam em fazer tudo o que você precisa.

Inicialização:

Para criar um Drop, crie uma instância drop:

let dropInstance = new Drop({
  target: document.querySelector('.drop-target'),
  content: 'Welcome to the future',
  classes: 'drop-theme-arrows',
  position: 'bottom left',
  openOn: 'click'
})

Métodos:

Você pode chamar alguns métodos na sua instância drop:

open()

Abre o drop. Adiciona o drop-open e outras classes ao drop;

close()

Fecha o drop. Remove o drop-open e outras classes do drop. Drops fechados ainda permanecem no DOM;

remove()

Remove o drop do DOM. Pode ser usado como uma alternativa para o close();

toggle()

Fecha o drop se estiver aberto, e abre o drop se estiver fechado;

isOpened()

Retorna true se o drop estiver aberto;

position()

Reposiciona o drop. Utilize-o se você alterar o conteúdo do drop ou a posição do elemento;

destroy()

Remove o drop junto com todos os seus eventos.

Continue lendo “Conheça Drop.js, uma biblioteca JavaScript”

Richard Feldman e o futuro da web.

Richard Feldman, na ReactiveConf em Praga, fez algumas previsões sobre o futuro da Web até 2025. Ele afirma que aposta em prever as evoluções de tecnologias atuais, como TypeScript e WebAssembly.

Apesar de o TypeScript estar evoluindo gradativamente, ainda há muitas reclamações em relação à sua verbosidade, que afeta a legibilidade do código-fonte. Mas Feldman afirma que o TypeScript será a escolha mais comum entre os desenvolvedores de projetos comerciais.

Com relação ao WebAssembly, Feldman sustenta que o futuro não seja guiado pelo WebAssembly por conta de seu desempenho aprimorado. Ele acredita que o WebAssembly permitirá a concorrência com as lojas e instaladores de apps.

Com relação ao gerenciamento de pacotes, Feldman afirma que o npm continuará relevante, mas que até o final de 2025, ocorrerá algum incidente de segurança, infectando pelo menos um pacote malicioso e afetando muitos desenvolvedores.

Feldman acredita que as linguagens de compilação para o JavaScript estarão crescendo, mas nenhuma de modo tão rápido quanto o TypeScript.

Fonte: https://www.infoq.com/news/2019/11/reactiveconf-2019-web-prediction/

Gostou desta notícia? Comente abaixo!

[Dica rápida]TypeScript: map()

Dando continuidade a minha série de artigos sobre TypeScript, hoje eu irei apresentar o map. Caso você tenha interesse em ler os primeiros artigos dessa serie, segue o link de cada um deles abaixo:

Bom, para quem não conhece o Map ele é uma das novidades do ES6, ele nos permite trabalhar com o conceito de coleção com chave e valor. Sua sintaxe é bem simples, basta instanciar ele e utilizar o get e o set para manipular os seus valores. Para ficar mais claro, vamos a alguns exemplos práticos:

Para criar um novo map basta utilizar o operador new:

let exMap = new Map();

E para popular ele nós devemos utilizar o operador set:

exMap.set("casa", 2);

Agora para resgatar um valor, nós podemos utilizar o get:

exMap.get('casa') // 2

Mas como eu passei acima, o map nos permite trabalhar com coleções. Abaixo você tem um trecho de código com um exemplo de um map com uma coleção.

let languages = new Map();
languages.set("C#", 1);
languages.set("JavaScript", 2);
languages.set("PHP", 3);


languages.forEach((value: string, key: number) => {
    console.log(key, value);
});

Resultado do código acima:

Além dos operadores get e set, map tem outros operadores que nos permitem: deletar uma chave, limpar todos os registros de uma coleção e verificar a quantidade de itens inseridos. Abaixo você tem um trecho de código demonstrando cada um deles:

Bem legal né?

Bom, a ideia desse artigo era demonstrar mais uma das funcionalidades do TS que podem nos ajudar no nosso dia dia 😉

Espero que tenham gostado e até um próximo artigo pessoal.

Fonte: https://medium.com/@programadriano/dica-r%C3%A1pida-typescript-conhecendo-o-ts-ignore

Gostou deste artigo? Deixe seu comentário abaixo!

Angular 7: novas funcionalidades

Veja nesse artigo como atualizar o seu ambiente de trabalho com a versão 7 do Angular e duas de suas novas funcionalidades

Já faz um bom tempo que eu estou focando os meus estudos no Angular, tive a oportunidade de participar de projetos com ele nas versões 2, 5 e 6. Hoje irei apresentar 2 novidades do que vieram nessa nova versão: o Drag and Drop e o Scrolling.

O primeiro passo será atualizar os nosso ambiente. Para isso, siga um dos passos abaixo de acordo com a versão que você tem instalada no seu computador:

Versão < 6

npm uninstall -g angular-cli
npm cache clean 
npm install -g @angular/cli@latest

Versão 6

ng update @angular/cli @angular/core

Para verificar se ele foi atualizado com sucesso, execute o comandong — versionno seu terminal. Abaixo você tem uma imagem demonstrando esse passo:

Atualizando o Angular para versão 7

Para ficar um passo a passo legal, vamos criar um novo projeto. Para isso, abra um terminal no seu computador e execute o comando ng new, note que você irá receber uma mensagem perguntando qual e o nome do seu projeto.

Essa é uma das novidades dessa nova versão. Abaixo você tem uma imagem demonstrando esse passo:

Novo projeto Angular versão 7

Informe o nome do seu projeto, em seguida note que você irá receber uma outra mensagem perguntando se deseja adicionar um arquivo de rotas. Eu irei informar Y para que ele adicione.

Adicionando rotas no Angular 7
O próximo passo será informar como você deseja trabalha com os estilos no seu projeto. Eu irei selecionar SCSS:

Adicionando rotas no Angular 7

Depois desse passo o seu projeto será criado. Para os próximos passos será necessário um editor de textos, eu irei utilizar o VS Code, mas você pode utilizar um de sua preferência.

Antes de nós começarmos a codar, vamos adicionar o Angular Material no nosso projeto. Para isso, execute o comando abaixo no seu terminal:

ng add @angular/material

Esse comando irá solicitar que você selecione um template para o seu projeto. Para esse artigo eu irei selecionar o indigo-pink.

Para as próximas perguntas eu irei informar N (não) para o HammerJS e Y (sim) para browser animations.

Com o projeto aberto no seu editor de textos, vamos conhecer as duas funcionalidades mencionadas no inicio desse artigo.

Drag and Drop

Nessa versão nós temos um módulo chamado DragDropModule. Para utilizar ele, basta adicionar a chamada abaixo no módulo que deseja utilizá-lo.

import {DragDropModule} from '@angular/cdk/drag-drop';

Em seguida atualize o arquivo app.component.html com o trecho de código abaixo:

<div class="example-box" cdkDrag>
  I can only be dragged using the handle

  <div class="example-handle" cdkDragHandle>
    <svg width="24px" fill="currentColor" viewBox="0 0 24 24">
      <path d="M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z"></path>
      <path d="M0 0h24v24H0z" fill="none"></path>
    </svg>
  </div>
</div>

E o arquivo app.component.scss com o trecho de código abaixo:

.example-box {
    width: 200px;
    height: 200px;
    padding: 10px;
    box-sizing: border-box;
    border: solid 1px #ccc;
    color: rgba(0, 0, 0, 0.87);
    display: flex;
    justify-content: center;
    align-items: center;
    text-align: center;
    background: #fff;
    border-radius: 4px;
    position: relative;
    z-index: 1;
    transition: box-shadow 200ms cubic-bezier(0, 0, 0.2, 1);
    box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2),
                0 2px 2px 0 rgba(0, 0, 0, 0.14),
                0 1px 5px 0 rgba(0, 0, 0, 0.12);
  }
  
  .example-box:active {
    box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2),
                0 8px 10px 1px rgba(0, 0, 0, 0.14),
                0 3px 14px 2px rgba(0, 0, 0, 0.12);
  }
  
  .example-handle {
    position: absolute;
    top: 10px;
    right: 10px;
    color: #ccc;
    cursor: move;
    width: 24px;
    height: 24px;
  }

Abaixo você tem uma imagem demonstrando o resultado dessa implementação:

Scrolling

Um outro módulo que chegou nessa nova versão foi o ScrollDispatchModule, ele nos permite trabalhar com virtual scroll.

Para implementá-lo vamos criar um novo componente chamado VirtualScroll. Para isso, execute o comando abaixo no seu terminal:

ng g c virtualScroll

Em seguida atualize o seu arquivo app.component.html com o trecho de código abaixo:

<router-outlet></router-outlet>

E o novo componente no arquivo de rotas: app-routing.module.ts:

{ path: ‘scroll’, component: VirtualScrollComponent }

Agora para implementar o Virtual Scroll, vamos atualizar os arquivos: virtual-scroll.component.ts, virtual-scroll.component.scss e virtual-scroll.component.hml com os trechos de código abaixo:

virtual-scroll.component.ts

import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';

@Component({
  selector: 'app-virtual-scroll',
  templateUrl: './virtual-scroll.component.html',
  styleUrls: ['./virtual-scroll.component.scss'],
  changeDetection: ChangeDetectionStrategy.OnPush,

})
export class VirtualScrollComponent implements OnInit {

  items = Array.from({length: 100000}).map((_, i) => `Item #${i}`);
  
  constructor() { }

  ngOnInit() {
  }

}

Analisando esse trecho de código nós temos:

  • 1: Estamos adicionando a chamada do ChangeDetectionStrategy para detectar as alterações no nosso componente
  • 12: estamos criando um array com 100000 itens para passar para nossa view

virtual-scroll.component.hml

<cdk-virtual-scroll-viewport itemSize="50" class="example-viewport">
  <div *cdkVirtualFor="let item of items" class="example-item">{{item}}</div>
</cdk-virtual-scroll-viewport>

virtual-scroll.component.scss

.example-viewport {
    height: 200px;
    width: 200px;
    border: 1px solid black;
  }
  
  .example-item {
    height: 50px;
  }

Abaixo você tem uma imagem demonstrando o resultado desse passo:

Os exemplos demonstrados nesse artigo foram retirados do site oficial do Angular. Caso tenham interesse em saber mais sobre essa nova versão, eu recomendo a leitura do seguinte link: Angular.io.

Fonte: medium.com/angularbr/angular-7-novas-funcionalidades

 

Criando App em 3 minutos

 

No artigo de hoje, criaremos um APK para android rapidamente utilizando HTML, CSS e JavaScript.

Vamos Começar!

Primeiramente, criaremos um novo projeto em branco. Neste projeto, você deve criar um arquivo HTML. O nosso será index.html e terá esta estrutura:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>App em 4 Minutos</title>
</head>
<body>
    
</body>
</html>

Podemos inserir um h1:

<h1>Olá Mundo</h1>

E também um botão:

<button>Clique aqui</button>

Após isso, adicionaremos um script JavaScript na página. Esse script adicionará uma função ao ser clicado o button, que irá disparar um alert.

document.querySelector("button").addEventListener("click", () =>{
    alert("Olá MundoJS!!!!!");
})

Na tag head, inserimos um css:

h1{
    font-size: 20px;
}

button{
    width: 100%;
    padding-top: 5px;
    padding-bottom: 10px;
}

Próximo passo:

Acessando o site http://build.phonegap.com, crie o seu login e acesse. Existem duas opções: open-source, onde você pode deixar seu app e códigos abertos para a comunidade, e a opção privada. Você pode utilizar o Pull do seu repositório GitHub e também pode adicionar um arquivo .zip com seus códigos.

Faremos o upload do nosso arquivo .zip. Feito o upload, adicionamos apenas uma descrição simples do aplicativo criado. Com esses poucos passos, criamos um arquivo .apk para android!

Depois disso, é só baixar o seu aplicativo clicando no botão Source! Você também pode acessá-lo diretamente do seu celular, utilizando o mesmo link da URL!

Baixando do celular, será necessário instalar o aplicativo .apk e realizar as permissões necessárias.

Confira as imagens:

E o APP criado:

O Adobe PhoneGap Build é um cloud service para compilar aplicativos PhoneGap. Ele fornece uma maneira dos usuários criarem aplicativos móveis utilizando HTML, CSS e JavaScript. Os aplicativos podem ser distribuídos em várias lojas de aplicativos, como Play Store, Apple iOS App Store, entre outros; E instalados no dispositivo do usuário final como qualquer outro aplicativo nativo. Ele oferece:

  • Compilação e assinatura gerenciadas (sem SDKs);
  • Várias plataformas suportadas;
  • Ciclo de desenvolvimento mais rápido;

Você pode ler toda a documentação do Adobe PhoneGap em: docs.phonegap.com/

Gostou deste Artigo? Deixe seu comentário abaixo!

JavaScript: Campos privados, classes estáticas e mais

Embora as classes estejam disponíveis para o JavaScript desde o ES2015, elas não incluem campos e métodos privados. Esses recursos foram descartados durante o release inicial devido a divergências no comitê do TC39. Três rascunhos de especificações pretendem levar esses recursos às classes JavaScript em um futuro próximo.

Depois que essas especificações forem formalmente aceitas, os campos e métodos privados poderão ser definidos usando o sinal de hash ‘#’. A decisão de usar o sinal de hash em vez do sublinhado mais tradicional ‘_’ foi tomada para evitar alterações nas bibliotecas existentes, que atualmente marcam os campos privados dessa maneira.

Isso pode parecer contra intuitivo, no entanto, apesar das bibliotecas marcarem campos ou métodos como privados usando o sublinhado, os desenvolvedores de sinal ainda os usam. Transformar essas variáveis em variáveis verdadeiramente privadas pode interromper vários aplicativos e, portanto, retardar a adaptação das novas especificações.

O problema pode ser demonstrado por uma anedota do React, que teve que recorrer a alguns nomes de variáveis bastante contundentes para impedir que os desenvolvedores os usassem (apesar de serem marcados como privados), como ‘_SECRET_DOM_DO_NOT_USE_ORYOU_WILL_BE_FIRED’. (Lê-se _DOM_SECRETO_NAO_USE_OU_VOCE_SERA_DEMITIDO ).

Cada uma das 3 propostas do TC39 aborda um aspecto diferente de campos e métodos privados nas classes. No entanto, deve ser seguro tratá-los como uma única proposta, pois provavelmente serão adicionados ao JavaScript ao mesmo tempo. As propostas são:

Declaração de campos da classe

Atualmente não é possível definir campos (variáveis) direto na classe. Ao invés disso, os desenvolvedores precisam fazê-lo diretamente no construtor da classe.

class Counter { 
  constructor() { 
    this.xValue = 0; 
  } 
}

A proposta pretende adicionar esta habilidade para escrever os campos diretamente na definição da classe.

class Counter { 
  xValue = 0;
  #yValue = 0;
  constructor() { }
}

Criação de métodos privados e de getter e setters privados para as classes.

Esta proposta pretende permitir a adição de métodos privados e o uso de getter e setter privados.

class Counter { 
  get #x() { return #xValue; } 
  set #x(value) { }

  #clicked() { } 
}

Funcionalidades de classes estáticas (static).

Esta proposta define como será implementado a funcionalidade de campos e métodos estáticos, podendo ser públicos ou privados.

class CustomDate { 
  static public() = {} 
  static #private() = {} 
}

Para mais informações veja o post original no link abaixo:

Fonte: https://www.infoq.com/news/2019/10/javascript-private-class-fields/